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' >>>