I am trying to update Z values of the vertices of the polygon shape. The script bellow works for polygons without multiparts and donuts. If I run this script for polygon shape that contains multiparts and donuts, I get error. How can I make it work?

My script:
        
    import arcpy

    fc = r"C:\Scratch\fcTest.shp"

    # Get Spatial Reference of dataset
    desc = arcpy.Describe(fc)
    sr = desc.spatialReference

    with arcpy.da.UpdateCursor(fc, ["SHAPE@"]) as cursor:
        for row in cursor:

            # Get Geometry
            geom = row[0]

            # Create an empty array object
            arr = arcpy.Array()

            # Read points, if Z is found to be zero reset it to 1
            for part in geom:
                for pnt in part:
                    if not pnt:
                        arr.add(None)
                        continue

                    if pnt.Z == 0:
                        pnt.Z = 1.0

                     # Add updated point to Array
                    arr.add(pnt)

            # Construct new polygon geometry from array whilst setting spatial reference and indicating it has Z
            newpoly = arcpy.Polygon(arr,sr,True)

            #Update row
            cursor.updateRow([newpoly])

Error:

     Traceback (most recent call last):
     File "C:\Scratch\fcTest.py", line 21, in <module>
        if pnt.Z == 0:
      AttributeError: 'NoneType' object has no attribute 'Z'
       >>>