错误使用dict()导致的令人困惑的错误消息

时间:2019-06-18 08:57:36

标签: python dictionary runtime-error

我刚刚遇到了d3的构造,其中第一个参数是一个映射,其余参数是未打包的键,值。

>>> d1 = dict(a=1, b=2, c=3)
>>> d2 = dict(d=4, e=5)
>>> d3 = dict(d1, **d2)
>>> d3
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}

因此,我决定看看如果不考虑unpack运算符会发生什么情况。

>>> d_bad = dict(d1, d2)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: dict expected at most 1 arguments, got 2

我的第一个想法是,很显然dict()可以接受多个参数,那么为什么会出现这个特定错误?我的第二个问题是,它实际上在抱怨特定类型映射的多个参数,因此是TypeError。但是不是这样吗?从表面上看,错误消息的文本容易​​混淆,甚至不正确。还是有一个原因无法使它更清晰?

1 个答案:

答案 0 :(得分:1)

{p>如doc中所述,以下是可能的参数:

class dict(**kwarg) 
class dict(mapping, **kwarg) 
class dict(iterable,**kwarg)

您的最后一个案例与其中任何一个都不匹配。

您可以在第一个mappingiterable之后传递命名参数;但不是第二个映射或可迭代的。

如果错误消息完全说明了这些选项,则值得商......