如何使用无数据类型对updatecursor中的项求和

时间:2017-07-07 09:32:05

标签: python arcpy

使用ESRI的arcpy在python中工作,我正在尝试使用arcpy updateCursor对多个字段中的值求和。我正在尝试将无项目转换为0.但是,我无法想出一种转换无项目的方法。我对任何事都持开放态度。

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'

谢谢!

2 个答案:

答案 0 :(得分:1)

您应该通过将列表理解的结果分配给row来更新row

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

另请注意,由于只有一个None个对象,因此最好使用is进行测试,而不是使用==;更多Pythonic,更高效。

答案 1 :(得分:0)

您可以使用if语句过滤列表中的None值:

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