下文描述的出错情况一般不太会出现,我遇到是因为在调整框架,在大量的复制粘贴中函数的调用和申明没有及时同步修改
出错源码+控制台输出的错误提示# add_integer函数是为了描述这种出错情况写的一个简易示例
def add_integer(a, b, params):
if params is None:
params = {}
if not isinstance(params, dict):
raise ValueError("parameter 'params' must be dict.".format(type(params)))
c = params.get("c", None)
result = a + b
if c is not None:
result = result + c
print(result)
data = {
"c": 10
}
add_integer(3, 3, **data)
>>>C:UsersAdministratorAppDataLocalProgramsPythonPython38python.exe C:/Users/Administrator/PycharmProjects/pythonProject2/test3.py
Traceback (most recent call last):
File "C:/Users/Administrator/PycharmProjects/pythonProject2/test3.py", line 16, in
add_integer(3, 3, **data)
TypeError: add_integer() got an unexpected keyword argument 'c'
Process finished with exit code 1
修改方案一:
将add_integer声明的参数列表中的params变为可变参**params
修改方案二:取消调用add_integers时参数data前的双星号
修改方案三:在data外再封一层字典(个人感觉可以但没必要)
def add_integer(a, b, params):
if params is None:
params = {}
if not isinstance(params, dict):
raise ValueError("parameter 'params' must be dict.".format(type(params)))
c = params.get("c", None)
result = a + b
if c is not None:
result = result + c
print(result)
data = {
"c": 10
}
kwargs = {
"params": data
}
add_integer(3, 3, **kwargs)
>>>C:UsersAdministratorAppDataLocalProgramsPythonPython38python.exe C:/Users/Administrator/PycharmProjects/pythonProject2/test3.py
16
Process finished with exit code 0
主要是理解在函数调用时**起解包字典对象中的元素,并将其作为关键字参数传入函数中的作用,更细致的描述可见:
(43条消息) python中的*和**_阿莫12138的博客-CSDN博客
内容如有错误,敬请指正!



