Python 间歇性地抛出 "AttributeError: ' NoneType' object has no attribute 'get' “在同一个字典上

标签 python dictionary

我有一个像这样的嵌套字典:

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',它将返回NoneNone.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/

相关文章:

python - 如何删除嵌套字典中的键及其所有值,然后按 "0","1","2","3"顺序更改和排列键,就像以前在 Python 中一样

python - 使用 Python 将列表字典转换为 CSV 文件

python - 如何调用实例列表中的特定方法(使用 map )?

python - 如何递归地转换类实例的属性

python - Osmnx 中给定边缘属性的测量/尺寸单位是什么

python - 如何从python中的gzip压缩文件中获取随机行而不将其读入内存

python - 将用户输入与关键字列表进行比较

scala - map 成员的排序是否可靠?

python - 获取当前函数参数的字典

Python sctp 模块 - 服务器端