Ken*_*ker 2 python dictionary styles nonetype keyerror
我有一个深嵌套的dict(从json解码,来自instagram api).我的初始代码是这样的:
caption = post['caption']['text']
Run Code Online (Sandbox Code Playgroud)
但是如果'caption'键或'text'键不存在,那将抛出NoneType或KeyError错误.
所以我想出了这个:
caption = post.get('caption', {}).get("text")
Run Code Online (Sandbox Code Playgroud)
哪个有效,但我不确定它的风格.例如,如果我将此技术应用于我正在尝试检索的更深层次的嵌套属性之一,它看起来非常难看:
image_url = post.get('images',{}).get('standard_resolution',{}).get('url')
Run Code Online (Sandbox Code Playgroud)
有没有更好,更pythonic的方式来写这个?我的目标是检索数据(如果有的话),但如果数据不存在则不会阻止执行.
谢谢!
Tec*_*gon 14
Python 3.4 和更新版本包含一个 contextlib 上下文管理器suppress,它正是用于此类事情。当您提前知道特定错误可能发生并且您的代码可以处理它时,抑制特定错误。
from contextlib import suppress
sample = {'foo': 'bar'}
with suppress(KeyError):
print(sample['baz'])
Run Code Online (Sandbox Code Playgroud)
将阻止KeyError被提升。
因此,为了访问深度嵌套的字典值,您可以suppress这样使用。
value = None
with suppress(KeyError):
value = data['deeply']['nested']['dictionary']['key']
Run Code Online (Sandbox Code Playgroud)
nne*_*neo 10
最恐怖的方式就是抓住KeyError:
try:
caption = post['caption']['text']
except KeyError:
caption = None
Run Code Online (Sandbox Code Playgroud)
对于Python程序员来说,这很简单,明显且易于理解.