python - 使用 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()
如果键存在但值为无,有没有办法使方法设置为默认值?
解决方案
我在这里的假设是 dict.get() 方法仅在未定义时设置默认值,并且具有 NoneType 值意味着它已定义。
dict.get(key[,default=None))
不“设置”任何东西。如果此键在字典中,则返回给定键的值,否则返回default
值。
如果键存在但值为无,有没有办法让 dict.get() 方法设置为默认值?
不,你必须手动完成——但这并不复杂,而且,在你的情况下,甚至没有必要:
employees = data.get("employees") or []
注意:您当然可以定义自己的 dict 子类,重新定义get
以根据需要工作,并告诉反json
序列化程序使用您自己的子类,dict
但是对于这样的用例,这有点矫枉过正......而且对于没有充分的理由。
推荐阅读
- django - 如何在扩展的 django_celery_result 模型中保存任务名称
- azure - 动态 Azure 数据工厂 v2 管道
- kubernetes - 在我的 YAML 似乎正确时收到有关获取“数组”并期待“地图”的错误
- python - 模拟库方法python
- spring - 使用 Spring Boot 在单个浏览器会话中使用多个 OAuth2 客户端
- react-native - 每当我使用 mapbox 时,React 本机应用程序就会崩溃
- html - CSS文本对齐延迟与宽度动画
- ssas - 处理多维数据集的用户名
- android - Firebase 功能日志什么也不显示
- java - lambda 表达式和通过实例化的方法引用之间的不同行为