我有一个像这样的嵌套字典:
mail = {
'data': { 'from': {'text': '123@example.com'}}
# some other entries...
}
Run Code Online (Sandbox Code Playgroud)
from
我正在尝试使用以下代码复制值:
data = mail.get('data')
new_dict['parse']['from'] = data.get('from').get('text')
Run Code Online (Sandbox Code Playgroud)
第二行抛出异常:
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')
Run Code Online (Sandbox Code Playgroud)
错误消失了,我得到了<class 'dict'>
预期的结果。如果我删除 print 语句,它有时会起作用,有时会引发错误。代码或数据没有任何其他变化。我使用的原因get()
是在密钥丢失的情况下安全地检索值。
在调用中data.get('from').get('text')
,如果data
不包含该密钥'from'
,则会返回None
。None.get('text')
然后引发您看到的异常,因为None
对象没有get
方法(当然)。
解决这个问题的方法是传入一个比None
(default default-object) 更好的默认对象,它具有该get
方法。那将是一本空字典{}
:
data = mail.get('data')
new_dict['parse']['from'] = data.get('from', {}).get('text')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2376 次 |
最近记录: |