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

Why am I getting this unexpected keyword argument TypeError?

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

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)

代码从line 44开始,到line 57结束。这是我收到的错误:

TypeError: second_test() got an unexpected keyword argument 'Name'

我用谷歌搜索了 "unexpected keyword argument",但始终找不到定义;只有其他 Whosebug 文章。 我的代码有什么问题?

当将 kwargs 传递给函数时,它期望在列表中找到确切的变量名。相反,如果您的字典键是 stringaintegerafloata,该函数将正常运行。

所以您要么需要更改您的函数变量名称,要么更改字典中的键名称以使其正常工作

关键字参数是通过名称传递的所有“unknown/unexpected”named 参数。

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

def func(a):
    print(a)

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

func(b=3) # remember we didn't define b as an argument

然后我们会得到一个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