【发布时间】:2020-12-20 15:56:22
【问题描述】:
我在使用collections.defaultdict 和.format() 方法时得到了KeyError
Shell 执行
In [1]: from collections import defaultdict
In [2]: foo = "Foo: {foo}\nBar: {bar}"
In [3]: default = defaultdict(lambda: 0)
In [4]: foo.format(**default)
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-4-799cab129cf2> in <module>
----> 1 foo.format(**default)
KeyError: 'foo'
我不期待KeyError,因为我使用的是defaultdict。为什么会这样?
除此之外,我想用一些默认值填充foo 变量,我该怎么做?
【问题讨论】:
-
你到底想达到什么目的?
-
我希望这也在 OP 中。 “我想用一些默认值填充
foo变量” -
顺便说一下,
KeyError不会因为defaultdict而直接引发。如果你只是做foo.format()你会得到完全相同的错误 -
是的,但是,
defaultdict不应该在我们寻找丢失的密钥时引发KeyError,这就是defaultdict的目的 -
是的,我想这与影子游侠的答案直接相关,在上面的代码中,
format试图做类似kwargs['foo']的事情,其中kwargs是空的,而format_map会做default['foo']并使用defaultdict的力量
标签: python python-3.x keyerror defaultdict