使用ArcPy UpdateCursor时遇elif语法错误,求解决方法
Python中arcpy.da.UpdateCursor的语法错误及行不存在问题解决
语法错误的根源
- 括号未闭合:前两个条件的赋值表达式末尾缺少右括号,Python无法解析完整语句,直接触发语法错误。
- 小数点符号错误:代码中使用了德语逗号(
0,161、1,5),但Python仅识别.作为小数点,这也是语法报错的诱因之一。 - 缺失模块导入:用到了
math.e却未导入math模块,后续运行也会触发报错。
"行不存在"问题的原因
cursor.updateRow(row)的缩进层级错误——它被放在了for循环外部,循环结束后row变量已失效,调用时自然会提示行不存在。必须将其缩进至循环内部,每处理完一行就立即执行更新操作。
修复后的完整代码
import math import arcpy fc = 'Oberbodenproben_mit_Laborwerten_2019_1' fields = ['ABAG_K_Faktor','K1','K2','K3','T_proz','U_proz','S_proz','U+ffS_proz','S-ffS_proz','Org_Substanz_proz','Permeabilitätsklasse','Aggregierungsklasse','Steinbedeckung_proz'] # 创建要素类的更新游标 with arcpy.da.UpdateCursor(fc, fields) as cursor: # 遍历每一行,计算并更新字段值 for row in cursor: if row[7] <= 70: row[1] = 2.77 * 10**(-5) * ((row[7] * (100 - row[4]))**1.14) elif row[7] > 70: row[1] = 1.75 * 10**(-5) * ((row[7] * (100 - row[4]))**1.14 + 0.0024 * row[8] + 0.161) elif row[9] <= 4: row[2] = row[1] * (12 - row[9]) / 10 elif row[9] > 4: row[2] = row[1] * 0.8 elif row[2] >= 0.2: row[3] = row[2] + 0.043 * (row[11] - 2) + 0.033 * (4 - row[10]) elif row[2] < 0.2: row[3] = 0.091 - 0.34 * row[2] + 1.79 * row[2]**2 + 0.24 * row[2] * row[11] + 0.033 * (4 - row[10]) elif row[12] <= 1.5: row[0] = row[3] elif row[12] > 1.5: row[0] = row[3] * (1.1 * math.e**(-0.0024 * row[12]) - 0.06) # 更新游标中的当前行 cursor.updateRow(row)
内容的提问来源于stack exchange,提问作者Karl Brandt
相关产品推荐
相关产品推荐

