如何避免在arcpy中迭代for循环时出现noneType错误
我的程序对我的for循环的一个元素起作用,但是一旦迭代到列表中的下一个元素,它就会向其余元素返回一个nonetype在我的列表中。我认为问题在于我在遍历循环时更改元素列表,但我不知道如何避免这种情况。有没有人有办法解决吗?代码如下。如何避免在arcpy中迭代for循环时出现noneType错误
数据库元素不是dc元素问题。
for database in datasetList:
arcpy.env.workspace = database
dcList = arcpy.ListDatasets()
print dcList
for dc in dcList:
arcpy.DefineProjection_management(dc, coordinateSystem)
返回的错误:
for dc in dcList:
TypeError: 'NoneType' object is not iterable
数据库元素是没有问题的DC元素。
如果database
不是有效的工作空间,则该方法arcpy.ListDatasets()
将返回None
。 (这是一个烦人的沉默错误。)这将打破dcList
循环,因为您无法遍历一个NoneType对象。
我以为你也可以通过在没有数据集的工作空间上运行得到None
,但是在测试一个空的地理数据库时,你会得到一个空列表[]
。所以这肯定是数据库的一个问题。
尝试列出数据集之前验证数据库是否存在。
if arcpy.Exists(database):
dcList = arcpy.ListDatasets()
for dc in dcList:
arcpy.DefineProjection_management(dc, coordinateSystem)
else:
print("This database does not exist: {}".format(database))
感谢您的帮助 –
如果这样工作,您可以通过点击复选标记来接受它。 – Erica
尝试打印您的dataList变量,然后重复它。 – PolyGeo