我经常不得不处理深度嵌套的JSON响应。一种访问元素的方法可能是这样的:
json_['foo'][0][1]['bar'][3]
但这显然根本不安全。一种解决方案是使用Python get
的{{1}}方法并将dict
作为默认参数传递。
{}
但这又会引发IndexError异常,使我每次访问列表元素时都要进行长度检查。
json_.get('foo', {})[0][1]['bar'][3]
那根本不漂亮。那么,有没有更好的解决方案呢?
答案 0 :(得分:5)
只需将整个内容包装在try/except
中:
try:
return json_['foo'][0][1]['bar'][3]
except IndexError, KeyError:
return None
答案 1 :(得分:1)
添加到其他答案中,如果您只想忽略可以使用的异常:
# Wrap this in a function
try:
return json_['foo'][0][1]['bar'][3]
except (KeyError, IndexError):
pass
另外,另一种抑制异常的方法是使用contextlib.suppress()
:
from contextlib import suppress
# Wrap this in a function
with suppress(KeyError, IndexError):
return json_['foo'][0][1]['bar'][3]