You need to enable JavaScript to run this app. Python解析可空嵌套JSON提取primary_ip触发AttributeError问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

Python解析可空嵌套JSON提取primary_ip触发AttributeError问题咨询

报错根因

你当前代码触发错误的核心原因是对字典get()方法的默认值触发逻辑存在误解:

  • 字典的get(key, default)方法,仅当目标键不存在于字典中时,才会返回设置的默认值。
  • 如果目标键实际存在,只是键对应的值为Python的None(对应JSON结构里的null),get()方法会直接返回这个None值,不会触发兜底的默认值逻辑。

你当前代码里的result.get('primary_ip', {}),当遇到primary_ip: null的设备条目时,实际返回值是None而非空字典,紧接着对None调用.get('address')方法,就会抛出你看到的属性错误。

可以用极简代码复现这个逻辑:

test_data = {"primary_ip": None}
print(test_data.get("primary_ip", {})) # 实际输出为None,不是设置的空字典
兼容空值的实现方案

以下几种写法都可以兼容primary_ip为null的场景,按需选择即可:

  • 显式空值判断
    按照你之前注释掉的判断逻辑补全兜底:
    primary_ip_info = result.get('primary_ip')
    # 当primary_ip存在且非None时再提取address字段,否则y赋值为None
    y = primary_ip_info.get('address') if primary_ip_info else None
    
  • 逻辑运算符短路兜底
    用or逻辑判断,把空值替换为空字典再提取字段:
    y = (result.get('primary_ip') or {}).get('address')
    
    逻辑是:如果result.get('primary_ip')返回值是None/空值,就自动使用空字典作为后续方法调用的对象,避免调用报错。
  • 可选链语法(适配Python 3.10及以上版本)
    用Python原生的可选链操作符简化写法,逻辑和上面完全一致:
    y = result.get('primary_ip')?.get('address')
    

额外提示:你代码里的z=result.get('site')['name']存在同样的空值风险,如果某个设备没有关联站点,这行代码也会触发相同的NoneType报错,可以用同样的兜底逻辑改写为z = (result.get('site') or {}).get('name'),提前规避问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 02:45:04