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

问题描述 投票:0回答:2

我正在使用

*args
**kwargs
测试一些代码,并且我为
**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 = ["MyName", 21, 132.00]
func(*profile_1)

profile_1a = {'Name': 'MyName', 'Problems Correct': 21, 'Points': 132.00}
func(**profile_1a)

代码从

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

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

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

python arguments keyword-argument
2个回答
20
投票

kwargs
传递给函数时,它期望在列表中找到确切的变量名称。如果您的字典键是
stringa
integera
floata
,则该功能将毫无问题地运行。

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


14
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.