我刚刚遇到了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
。但是不是这样吗?从表面上看,错误消息的文本容易混淆,甚至不正确。还是有一个原因无法使它更清晰?
答案 0 :(得分:1)
class dict(**kwarg) class dict(mapping, **kwarg) class dict(iterable,**kwarg)
您的最后一个案例与其中任何一个都不匹配。
您可以在第一个mapping
后iterable
之后传递命名参数;但不是第二个映射或可迭代的。
如果错误消息完全说明了这些选项,则值得商......