我有一个像这样的嵌套字典:
mail = {
'data': { 'from': {'text': '123@example.com'}}
# some other entries...
}
我正在尝试复制 from
使用以下代码值:
data = mail.get('data')
new_dict['parse']['from'] = data.get('from').get('text')
第二行抛出异常:
AttributeError: 'NoneType' object has no attribute 'get'
奇怪的是,这种情况只偶尔发生。如果我在第二行之前添加一条打印语句,例如:
data = mail.get('data')
print(type(data.get('from')))
new_dict['parse']['from'] = data.get('from').get('text')
错误消失,我得到 <class 'dict'>
正如预期的那样。如果我删除 print 语句,它有时会起作用,有时会引发错误。代码或数据没有任何其他变化。我使用 get()
的原因是在 key 丢失的情况下安全地检索值。
最佳答案
在调用 data.get('from').get('text')
中,如果 data
不包含键 'from'
,它将返回None
。 None.get('text')
会引发您看到的异常,因为 None
对象没有 get
方法(当然)。
解决这个问题的方法是传入一个比 None
(默认的默认对象)更好的默认对象,它具有 get
方法。那将是一个空字典,{}
:
data = mail.get('data')
new_dict['parse']['from'] = data.get('from', {}).get('text')
关于Python 间歇性地抛出 "AttributeError: ' NoneType' object has no attribute 'get' “在同一个字典上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48702464/