TypeError Traceback (most recent call last)
Cell In[30], line 72
70 obstacles.append(obstacle)
71 elif isinstance(geometry, MultiPolygon):
---> 72 for polygon in geometry:
73 coordinates = list(polygon.exterior.coords)
74 obstacle = [list(coord) for coord in coordinates]
TypeError: 'MultiPolygon' object is not iterable
报错:'MultiPolygon'不可迭代
解决:这里貌似是for polygon in geometry这一句的问题,但是把 elif isinstance(geometry, MultiPolygon):换成
elif (geometry.type== MultiPolygon):
以后就可以正常运行了。
原因:instance可用于继承关系的判断,type 比isinstance更明确类型
1.isinstance(geometry, MultiPolygon)
:
使用 isinstance
函数检查对象是否是指定类或其子类的实例。这种方式会考虑到继承关系,即使对象是某个类的子类也会返回 True
。示例:如果 geometry
是 MultiPolygon
的子类,例如 CustomMultiPolygon
,也会返回 True
。
2.(geometry.type == 'MultiPolygon')
:
则直接比较对象的类型。要求对象的确是准确的 MultiPolygon
类型,而不是其子类。如果 geometry
是 CustomMultiPolygon
的实例,会返回 False
。
更新:
解决:若仍存在'MultiPolygon'对象不可迭代的问题,可以通过geoms属性来访问'MultiPolygon'对象中的polygon
如
for polygon in geometry.geoms: