将kwargs传递给函数会调用TypeError

时间:2015-07-26 00:41:30

标签: python function dictionary parameters

发生错误时我正在编写一个包装器方法。我已设法将问题简化为以下代码:

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的类方法,但事实并非如此。

1 个答案:

答案 0 :(得分:2)

事实证明,在func2(data, kwargs)内拨打func1时,我们使用两个参数func2data来提供kwargs字典。< / p>

即使字典为空,它仍然是一个单项,它被识别为另一个参数(而不是被调用的命名参数序列func1),因此出现错误信息。

由于func2期望以下列方式调用:

func2(data, arg1='alpha', arg2='beta', arg3=... )

Unpacking需要字典。因此func1应为:

def func1(data, **kwargs):
    func2(data, **kwargs)

请注意**调用上的func2,这样就可以解压缩字典,并且类似于func2期望调用的字典。