如何避免在arcpy中迭代for循环时出现noneType错误

如何避免在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 
+0

尝试打印您的dataList变量,然后重复它。 – PolyGeo

数据库元素是没有问题的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)) 
+0

感谢您的帮助 –

+0

如果这样工作,您可以通过点击复选标记来接受它。 – Erica