我有一个像这样的嵌套字典:
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()是在密钥丢失的情况下安全地检索值。
在调用中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')