为什么我会收到这个意外的关键字参数 TypeError?

mpn*_*pnm 11 python arguments keyword-argument

我正在用*args和测试一些代码**kwargs,我dictionary**kwargs. 出于某种原因,我得到

def func(*args, **kwargs):
    if args:
        second_test(*args)
    elif kwargs:
        second_test(**kwargs)

def second_test(stringa, integera, floata):
    print("Name: %s, Problems Correct: %d, Points: %f" % (stringa, integera, floata))

profile_1 = ["David", 21, 132.00]
func(*profile_1)

profile_1a = {'Name': 'David', 'Problems Correct': 21, 'Points': 132.00}
func(**profile_1a)
Run Code Online (Sandbox Code Playgroud)

代码开始于line 44并结束于line 57。这是我得到的错误:

TypeError: second_test() got an unexpected keyword argument 'Name'
Run Code Online (Sandbox Code Playgroud)

我在谷歌上搜索了“意外的关键字参数”,但我永远找不到定义;只有其他stackoverflow文章。我的代码有什么问题?

Nov*_*ice 11

当传入kwargs一个函数时,它期望在列表中找到确切的变量名。如果相反,您的字典键是stringa, integera,则floata该函数将正常工作。

因此,您需要更改函数变量名称更改字典中的键名才能使其正常工作


בני*_*כהן 9

关键字参数是通过名称传递的所有“未知/意外”命名参数。

例如,让我们定义一个带有一个参数的函数

def func(a):
    print(a)
Run Code Online (Sandbox Code Playgroud)

现在,如果我们像这样使用“意外”命名参数调用此函数

func(b=3) # remember we didn't define b as an argument
Run Code Online (Sandbox Code Playgroud)

然后我们会得到一个 TypeError。但是如果我们修改函数以排除这些“意外”命名参数,那么我们可以运行前面的代码

def func(a, **kwargs):
    print(a)
    print(kwargs["b"]) # now, if we pass an argument 'b' to the function, this will print its value (if we don't, we get a KeyError)

> func(3, b=15)
3
15

Run Code Online (Sandbox Code Playgroud)