You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 04:35:32