空字典作为 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() 的默认值的主要内容,如果未能解决你的问题,请参考以下文章

字典 get()

Python snippet(代码片段)

dict.get("A", "B") 从字典中获取值的方法

dict,列表方法

39-python基础-python3-字典常用方法-get()

在向服务器发布请求时,我们如何在字典 [String:String] 的参数列表中传递默认空值?斯威夫特3