Python报错‘takes 2 positional arguments but 3 were given’求解
Python方法调用参数错误分析
你的问题出在****kwargs的使用方式**上:
方法定义里的**kwargs是用来接收关键字参数的(也就是key=value形式的参数),不能直接接收位置参数。
你调用my_service.my_method(old_instance, new_data)时,old_instance和new_data都是位置参数,加上实例方法自动传入的self,总共是3个位置参数。但你的方法定义里,除了self之外,只声明了1个位置参数instance,所以Python会报错“takes 2 positional arguments but 3 were given”(这里的2个指的是self+instance,你实际传了self+old_instance+new_data三个)。
解决办法
有两种方式可以修正这个问题:
1. 解包字典作为关键字参数
如果new_data是一个字典,直接用**解包后传递:
# 假设new_data是字典类型 new_data = {"param1": "value1", "param2": "value2"} my_service.my_method(old_instance, **new_data)
这样字典里的键值对会被转换成param1=value1、param2=value2的形式,被**kwargs接收。
2. 直接传递关键字参数
如果new_data是单个值,把它改成关键字参数的形式传递:
my_service.my_method(old_instance, custom_param=new_data)
这里的custom_param可以换成你实际需要的参数名,它会被**kwargs收集到字典里。
内容的提问来源于stack exchange,提问作者tolga
相关产品推荐
相关产品推荐

