首页 > 解决方案 > 使用 dict.get() 方法时 NoneType 不可迭代

问题描述

我输入的 JSON 如下所示:

{"employees": [{"foo": "bar"}]}

有时员工可能是空的,或者不存在。而不是检查dict中是否存在employees键,并确保它不为空,如下所示:

if employees in data and data["employees"]:

我正在使用该.get()方法进行迭代,将空列表设置为默认值:

for i in data.get("employees", []):

但是,如果我的输入数据如下所示:

{"employees": None}

然后我得到错误TypeError: 'NoneType' object is not iterable。我在这里的假设是该dict.get()方法仅在未定义的情况下设置默认值,并且具有 NoneType 值意味着它已定义。

dict.get()如果键存在但值为无,有没有办法使方法设置为默认值?

标签: pythonjsondictionary

解决方案


我在这里的假设是 dict.get() 方法仅在未定义时设置默认值,并且具有 NoneType 值意味着它已定义。

dict.get(key[,default=None))不“设置”任何东西。如果此键在字典中,则返回给定键的值,否则返回default值。

如果键存在但值为无,有没有办法让 dict.get() 方法设置为默认值?

不,你必须手动完成——但这并不复杂,而且,在你的情况下,甚至没有必要:

  employees = data.get("employees") or []

注意:您当然可以定义自己的 dict 子类,重新定义get以根据需要工作,并告诉反json序列化程序使用您自己的子类,dict但是对于这样的用例,这有点矫枉过正......而且对于没有充分的理由。


推荐阅读