调用update_user()报参数错误:仅接受1个位置参数却传入2个,附相关代码截图
报错原因及解决方案
报错update_user() takes 1 positional argument but 2 were given的核心是:你调用update_user函数时传入的位置参数数量,超出了函数定义时约定的接收数量。
常见产生原因
- 如果
update_user是写在类内部的方法:函数定义没有加第一个形参self,也没有加@staticmethod装饰器。此时用类实例调用该方法时,Python会自动将实例对象作为第一个参数传入,叠加你主动传入的1个参数,总传参量就变成2个,和函数定义的1个形参不匹配。 - 如果
update_user是独立函数:函数定义的形参数量少于你调用时传入的参数数量,比如你定义时只留了1个接收数据的形参,调用时同时传了用户ID和更新数据两个参数。
排查步骤
- 打开
services/user.py文件,找到update_user的定义代码,统计它的位置形参数量。 - 打开
views/user.py文件,找到你调用update_user的代码行,统计你主动传入的位置参数数量。 - 对比两处的参数数量,如果是类内方法,需要额外确认是否有
self形参或者@staticmethod装饰器。
解决方法
类内方法场景
如果是类内定义的方法,两种修改方案二选一:
- 补充
self形参
class UserService: # 补充self作为第一个形参 def update_user(self, data): # 原有业务逻辑
- 增加静态方法装饰器
class UserService: # 加静态方法装饰器,不会自动传入实例参数 @staticmethod def update_user(data): # 原有业务逻辑
独立函数场景
如果是独立函数,直接修改函数定义的形参列表,和调用时传入的参数数量匹配即可,比如:
# 调用时传了user_id和data两个参数,定义时对应加两个形参 def update_user(user_id, data): # 原有业务逻辑
内容的提问来源于stack exchange,提问作者danh nguyen
相关产品推荐
相关产品推荐

