空字典作为 dict.get() 的默认值
Posted
技术标签:
【中文标题】空字典作为 dict.get() 的默认值【英文标题】:Empty dict as default value of dict.get() 【发布时间】:2018-02-19 19:00:51 【问题描述】:我正在尝试传递一个空字典作为调用另一个字典上的.get()
的默认返回值。
queryStringParameters = event.get('queryStringParameters', ()
size = queryStringParameters.get('size', 25)
但是,queryStringParameters.get(...)
会抛出一个错误,指出 queryStringParameters 是 None
。
'NoneType' object has no attribute 'get': AttributeError
Traceback (most recent call last):
File "/var/task/api/game.py", line 13, in all
size = queryStringParameters.get('size', 25)
AttributeError: 'NoneType' object has no attribute 'get'
这是不可能的,还是我做错了什么?我也尝试了以下方法:
queryStringParameters = event.get('queryStringParameters', dict())
【问题讨论】:
event.get('queryStringParameters', )
完全有可能返回None
。观察一个等效示例:event = 'a':None; event.get('a', )
【参考方案1】:
event
可能实际上包含一个密钥 queryStringParameters
,而该密钥恰好是 None
。你检查过密钥是否存在吗?
仅当key不存在时才返回默认值,如果存在且恰好为None则不返回。
但你也可以写
queryStringParameters = event.get('queryStringParameters', ) or
为了安全起见。
【讨论】:
我认为这里的问题是 OP 太“安全”。 我宁愿明确检查它是否为无。因为如果该值已经是一个空字典,那么您将不会获得该实例,而是一个新创建的实例。可能没有问题,但取决于 OPs 程序的其他部分如何使用event
以及其中的字典...以上是关于空字典作为 dict.get() 的默认值的主要内容,如果未能解决你的问题,请参考以下文章