为什么我会收到这个意外的关键字参数 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
传递给函数时,它期望在列表中找到确切的变量名。相反,如果您的字典键是 stringa
、integera
和 floata
,该函数将正常运行。
所以您要么需要更改您的函数变量名称,要么更改字典中的键名称以使其正常工作
关键字参数是通过名称传递的所有“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
我正在用 *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
传递给函数时,它期望在列表中找到确切的变量名。相反,如果您的字典键是 stringa
、integera
和 floata
,该函数将正常运行。
所以您要么需要更改您的函数变量名称,要么更改字典中的键名称以使其正常工作
关键字参数是通过名称传递的所有“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