JSON数据含null无法返回0引发异常,该如何解决?
问题原因
你遇到的报错是因为allReviews里的aggregates键确实存在,但值是null(转成Python就是None)。dict.get(key, default)的默认值只有当键不存在时才会生效,现在键存在但值是None,所以你拿到的是None,而None没有get方法,自然就报错了。
解决方案
1. 手动处理None值
在可能返回None的节点后加or {},把None替换成空字典,再继续调用get:
total_reviews = (data.get('data', {}) .get('node', {}) .get('allReviews', {}) .get('aggregates') or {}) .get('count', 0)
这里get('aggregates')如果拿到None,or {}就会把它换成空字典,后续就能正常调用.get('count', 0)了。
2. 写一个通用的安全取值函数
如果经常需要处理这种嵌套结构,写个工具函数更方便:
def safe_nested_get(obj, keys, default=0): current = obj for key in keys: if current is None or not isinstance(current, dict): return default current = current.get(key) return current if current is not None else default # 使用方式 total_reviews = safe_nested_get(data, ['data', 'node', 'allReviews', 'aggregates', 'count'], 0) total_ratings = safe_nested_get(data, ['data', 'node', 'myReviews', 'totalReviews'], 0)
这个函数会遍历每个键,中途遇到None或者非字典类型就直接返回默认值,避免报错。
3. 用try-except兜底(不是只能,但也可以用)
如果不想写函数,也可以用try-except快速处理:
try: total_reviews = data['data']['node']['allReviews']['aggregates']['count'] except (KeyError, TypeError): total_reviews = 0
这里TypeError用来处理aggregates是None的情况(None['count']会触发TypeError),KeyError处理键不存在的情况,兜底返回0。
内容的提问来源于stack exchange,提问作者Johnny John Boy
相关产品推荐
相关产品推荐

