在python中使用条件语句检查字典是否为空是抛出一个键错误

时间:2015-04-24 21:15:16

标签: python

我是Python的新手,所以我正在阅读Pro Python,它有关于将变量关键字参数传递给函数的部分。在阅读完该部分之后,我编写了以下代码,但这些代码似乎无法正常工作。

def fun(**a):
    return a['height'] if a is not {} else 0

当我打电话给没有参数的乐趣时,我遇到了一个关键错误。如果a不是空字典,我应该如何更改代码以使其返回[' height']如果它是空字典则返回0?

2 个答案:

答案 0 :(得分:1)

您正在测试a 同一个对象是否为随机空字典,而不是该字典是否具有密钥heightis notis测试身份,而非等同。

您可以创建任意数量的空字典,但它们不会是相同的对象

>>> a = {}
>>> b = {}
>>> a == b
True
>>> a is b
False

如果您想在缺少密钥时返回默认值,请使用此处的dict.get() method

return a.get('height', 0)

或使用not a测试空字典:

return a['height'] if a else 0

但请注意,如果字典中包含KeyError以外的密钥,您仍会获得'height'。所有空容器在布尔上下文中测试为 false ,请参阅Truth Value Testing

答案 1 :(得分:0)

要检查字典是否具有特定密钥,请执行以下操作:

if 'height' not in a: return 0

或者您可以将get()与默认值一起使用:

return a.get('height', 0)