发生错误时我正在编写一个包装器方法。我已设法将问题简化为以下代码:
def func1(data, **kwargs):
func2(data, kwargs)
def func2(data, **kwargs):
print(data)
运行TypeError: func2() takes 1 positional argument but 2 were given
时会显示func1
。
无论我在函数调用中添加了什么命名参数,都会发生错误。但是,如果我没有将kwargs
传递给func2
,那么一切都会顺利进行。
我发现的有关错误消息的大部分信息都涉及不调用self
的类方法,但事实并非如此。
答案 0 :(得分:2)
事实证明,在func2(data, kwargs)
内拨打func1
时,我们使用两个参数func2
和data
来提供kwargs
字典。< / p>
即使字典为空,它仍然是一个单项,它被识别为另一个参数(而不是被调用的命名参数序列func1
),因此出现错误信息。
由于func2
期望以下列方式调用:
func2(data, arg1='alpha', arg2='beta', arg3=... )
Unpacking需要字典。因此func1
应为:
def func1(data, **kwargs):
func2(data, **kwargs)
请注意**
调用上的func2
,这样就可以解压缩字典,并且类似于func2
期望调用的字典。