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

ArcGIS Pro字段计算结合Python len()的自定义函数异常排查

原脚本核心错位问题梳理
  • 代码执行流断联:所有return语句分布在三个类型字段判断、面积判断分支上,后续书写的Fieldvalue5.upper()代码位于函数无return的路径末端,永远不会被执行
  • 空值触发报错:直接对可能为ArcGIS空值(Python中对应None)的字段调用len()方法,会直接抛出类型错误,未先做无效值过滤
  • 参数逻辑错配:需求要求将Typ1/Typ2/Typ3的标识文本转大写,原代码将大写转换逻辑绑定到了未参与核心计算的!total!字段上
  • 规则应用顺序颠倒:Shape_area低于60统一修正为60的规则未前置处理,反而被放在类型字段判断之后单独返回,脱离了“类型字段+面积值”的拼接核心目标
  • 兜底逻辑缺失:未实现“三个类型字段均无有效取值时返回No data”的判断,原代码走完类型字段判断分支后,会直接进入面积判断,逻辑完全偏离需求
适配原调用语句的修正代码

直接把以下代码粘贴到字段计算的代码块中,无需改动原函数调用语句value (!Typ1!, !Typ2!, !Typ3!, !Shape_area!, !total!):

def value(Fieldvalue1, Fieldvalue2, Fieldvalue3, Fieldvalue4, Fieldvalue5):
    # 前置处理Shape_area值:低于60统一校准为60
    try:
        area_num = float(Fieldvalue4)
        area_part = "60" if area_num < 60 else str(area_num)
    except:
        # 面积值为空、格式异常时默认用60参与拼接,避免计算中断
        area_part = "60"

    # 按优先级取第一个有效类型字段值,统一转大写
    valid_type = None
    for field_val in [Fieldvalue1, Fieldvalue2, Fieldvalue3]:
        if field_val is None:
            continue
        type_str = str(field_val).strip()
        # 保留原代码的“字段长度大于1才算有效”判断规则
        if len(type_str) > 1:
            valid_type = type_str.upper()
            break

    # 按规则返回最终结果
    if valid_type:
        return f"{valid_type}_{area_part}"
    else:
        return "No data"
现场调试校验要点
  • 字段计算对话框的解析器需选择Python 3,避免脚本语法不兼容
  • 分场景测试:
    • 当Typ1有长度大于1的有效文本、Shape_area为40时,校验返回值是否为「大写后的Typ1内容_60」
    • 当Typ1、Typ2为空,Typ3有有效文本、Shape_area为120时,校验返回值是否为「大写后的Typ3内容_120」
    • 当三个Typ字段均为空或长度小于1时,校验返回值是否为No data
  • 如果类型字段存在单字符的有效取值,只需将有效判断的len(type_str) > 1调整为len(type_str) > 0即可

内容的提问来源于stack exchange,提问作者Vandeda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 01:45:04