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

修复属性值为空时使用UpdateCursor的If/Else循环问题

解决ArcPy UpdateCursor追加注释的错误及优化方案

错误原因分析

报错TypeError: list.append() takes exactly one argument (2 given)是因为**list.append()方法只能接收一个参数**,你在confcom.append(row[2], ", ")里传了两个参数,违反了语法规则。

修正后的代码(含效率优化)

下面的代码修复了语法错误,同时优化了游标使用逻辑(避免重复打开游标浪费资源),还兼容了None和空字符串两种常见的空值场景:

fc = DB
fieldname = ["StationID", "StationStatus", "StatusComments_Source"]

# 仅打开一次游标,提升批量处理效率
with arcpy.da.UpdateCursor(fc, fieldname) as cursor:
    for row in cursor:
        # 检查当前记录的StationID是否在目标列表中
        if row[0] in confirm:
            row[1] = "Confirm"  # 标记数据为已确认
            # 处理注释字段:空值直接赋值,非空则追加内容
            if not row[2]:  # 同时匹配None和空字符串
                row[2] = StatusComments_Source
            else:
                # 直接用字符串拼接替代列表操作,更简洁高效
                row[2] = f"{row[2]}, {StatusComments_Source}"
            cursor.updateRow(row)

关键改进点

  1. 修复语法错误:移除错误的多参数append写法,改用字符串格式化直接完成拼接,代码更简洁。
  2. 优化游标逻辑:将UpdateCursor移至外层,避免为每个StationID重复打开/关闭游标,大幅提升处理速度。
  3. 兼容多种空值:用if not row[2]替代if row[2] is None,同时覆盖None和空字符串两种空值情况。
  4. 简化层级结构:用row[0] in confirm替代嵌套循环,减少代码冗余。

补充场景优化

如果StatusComments_Source是每个StationID对应的单独注释(而非全局统一值),可以将confirm转换为字典格式,进一步提升匹配效率:

# 假设confirm是(StationID, 对应注释)的列表,先转为字典
confirm_dict = dict(confirm)

with arcpy.da.UpdateCursor(fc, fieldname) as cursor:
    for row in cursor:
        station_id = row[0]
        if station_id in confirm_dict:
            row[1] = "Confirm"
            target_comment = confirm_dict[station_id]
            if not row[2]:
                row[2] = target_comment
            else:
                row[2] = f"{row[2]}, {target_comment}"
            cursor.updateRow(row)

内容的提问来源于stack exchange,提问作者Nicki.s

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 08:30:12