2017-10-05 308 views
-1

我的程序對我的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

回答

0

數據庫元素是沒有問題的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