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
相关产品推荐
相关产品推荐

