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

Python如何判断嵌套JSON属性是否存在并处理None触发的类型错误

Python判断嵌套字典属性时避免None触发类型错误的解决方案

原代码报错的核心原因是:当嵌套层级中某一层的取值为None时,in关键字无法对NoneType类型做成员判断,只有字典类型支持该操作。因此需要在每一层成员判断前,先校验当前节点的类型是否为字典。

方案1:封装通用嵌套属性获取函数(推荐)

封装可复用的工具函数,支持任意层级的嵌套属性查询,不存在或中间层级异常时直接返回默认值:

import json

def get_nested_value(data: dict, key_path: list, default=None):
    current_node = data
    for key in key_path:
        # 每一步先判断当前节点是否为字典,且目标key存在
        if not isinstance(current_node, dict) or key not in current_node:
            return default
        current_node = current_node[key]
    return current_node

# 测试场景1:完整层级
testJsonString = """
{
    "a": {
        "b": {
            "c": {
                "x": "Value One",
                "y": "Value Two"
            }
        }
    }
}
"""
testDict = json.loads(testJsonString)
x_val = get_nested_value(testDict, ['a', 'b', 'c', 'x'])
y_val = get_nested_value(testDict, ['a', 'b', 'c', 'y'])
if x_val:
    print(x_val)
if y_val:
    print(y_val)

# 测试场景2:中间层级为None
testJsonString2 = """
{
    "a": {
        "b": null
    }
}
"""
testDict2 = json.loads(testJsonString2)
x_val2 = get_nested_value(testDict2, ['a', 'b', 'c', 'x'])
print(x_val2) # 输出None,不会触发报错

方案2:异常捕获(适合临时快速处理)

如果不想额外封装函数,可以直接用try-except捕获可能出现的TypeError(中间节点为None)和KeyError(key不存在)异常:

testDict = json.loads(testJsonString)
try:
    print(testDict['a']['b']['c']['x'])
    print(testDict['a']['b']['c']['y'])
except (KeyError, TypeError):
    # 层级不完整时直接跳过处理逻辑
    pass

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:54:04