2017-10-05 2 views
-1

내 프로그램은 for 루프의 한 요소에서 작동하지만 목록의 다음 요소로 반복되면 나머지 요소에 대해 비 형식을 반환합니다 내 목록에. 문제는 루프를 반복하면서 요소 목록을 변경하고 있지만이를 피하는 방법을 모르겠다 고 생각합니다. 누구든지 해결책이 있습니까? 코드는 다음과 같습니다.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

데이터베이스 요소는 문제가되지 직류 요소입니다. database 만약

다음 arcpy.ListDatasets() 방법은 None 반환됩니다 유효한 작업 공간이 아닙니다. (이것은 귀찮게 침묵하는 오류입니다.) 이것은 NoneType 객체를 반복 처리 할 수 ​​없기 때문에 dcList 루프를 깨뜨릴 것입니다.

데이터 세트가없는 작업 영역에 대해 ListDatasets을 실행하여 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

관련 문제