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

时间:2017-10-05 14:36:58

标签: python arcpy

我的程序适用于for循环的一个元素,但是一旦它迭代到列表中的下一个元素,它就会向我列表中的其余元素返回一个非类型。我认为问题是我在循环循环时更改元素列表但我不知道如何避免这种情况。有没有人有办法解决吗?代码如下。

数据库元素不是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

1 个答案:

答案 0 :(得分:0)

  

数据库元素不是dc元素。

如果database不是有效的工作区,则arcpy.ListDatasets()方法将返回None。 (这是一个恼人的无声错误。)这将打破dcList循环,因为你不能遍历NoneType对象。

我认为您可能会因为没有数据集的工作区运行None而获得ListDatasets,但在针对空地理数据库进行测试时,您会得到一个空列表[]。所以这肯定是数据库的一个问题。

在尝试列出数据集之前验证数据库是否存在。

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