2017-07-07 7 views
0

ESRIのarcpyを使用してPythonで作業していますが、arcpy updateCursorを使用して複数のフィールドにわたって値を合計しようとしています。 None項目を0に変換しようとしていますが、None項目を変換する方法がわかりません。私は何でもできる。updatecursorの項目をNoneデータ型で合計する方法

with arcpy.da.UpdateCursor(feature_class, score_fields) as cursor: 
    for row in cursor: 
     [0 if x==None else x+4 for x in row] 
     print row 
     row[len(score_fields)-1] = sum(row[i] for i in range(len(score_fields))) 
     cursor.updateRow(row) 

戻り値:エラーと

[-4, -4, None, None, -4, None, -4, -4] 

TypeError: unsupported operand type(s) for +: 'int' and 'NoneType' 

ありがとう!

+0

これを見てください[Pythonでハンドルなしタイプ](0120-912-1801) – WhatsThePoint

答えて

1

あなたはrowにリストの内包表記の結果を割り当てることによってrowを更新する必要があります。

for row in cursor: 
    row = [0 if x is None else x+4 for x in row] 

また、 Noneオブジェクトが1つしかないので、isを使用してテストするほうが、==より優れていることに注意してください。より多くのPythonic、よりperformant。

0

あなたはあなたのリストにNone値をフィルタするif文を使用することができます。

sum(row[i] for i in range(len(score_fields)) if row[i] is not None) 
+1

これはあまりにも感謝しました。モーゼの答えは、リストされていない他のコードによく合います。 – Dodgens

関連する問題