dict.get()的默认值为空字典

5

我试图将一个空字典作为调用另一个字典的.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())

3
event.get('queryStringParameters', {}) 有可能返回 None。举个类似的例子:event = {'a':None}; event.get('a', {}) - juanpa.arrivillaga
这个回答解决了你的问题吗?使用字典的get方法,默认情况下返回空列表会返回None - undefined
1个回答

13

很有可能 event 实际上包含一个键名为 queryStringParameters 的值,而该值恰好为 None。您是否检查过该键是否存在?

默认值仅在键不存在时返回,而不是存在但值恰好为 None 时返回。

您也可以编写以下内容:

queryStringParameters = event.get('queryStringParameters', {}) or {}

为了安全起见。


我认为这里的问题是原帖作者过于“保守”了。 - juanpa.arrivillaga
我宁愿明确地检查它是否为None。因为如果该值已经是一个空字典,你将得到一个新创建的实例而不是原来的实例。这可能没有问题,但取决于OP程序中其他部分如何使用event和其中的字典... - swenzel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接