Python pytest测试无参方法报参数错误加@staticmethod不生效如何解决
报错原因与解决方案
你遇到的TypeError: read_products() takes 0 positional arguments but 1 was given报错,核心是函数调用时传入的参数数量,和函数定义要求的参数数量不匹配,对应你尝试过的操作,按以下步骤排查即可:
步骤1:确认read_products的定义场景
- 如果
read_products是定义在类中的普通实例方法:
实例方法默认第一个参数为self,调用时必须通过类的实例对象调用,不能直接用类名调用:
如果你不需要用到实例属性,给方法加# 错误示例 类名.read_products() # 正确示例 实例对象 = 类名() 实例对象.read_products()@staticmethod装饰器后,既可以用类名调用,也可以用实例调用,无需传任何参数。 - 如果
read_products是全局独立函数:
直接检查所有调用该函数的代码位置,确认调用时括号内没有传入多余的参数,比如不要误写成read_products(参数)的格式。
步骤2:排查之前操作无效的原因
- 加
self参数后仍报错:你大概率还是直接用类名调用了方法,没有传入实例对象,符合报错的参数不匹配逻辑。 - 加
@staticmethod后仍报错:要么是装饰器加错了位置,要么是调用时仍多传了参数,要么是pytest加载了旧版本代码,删除pytest缓存目录后重新运行测试即可。
内容的提问来源于stack exchange,提问作者João Silva
相关产品推荐
相关产品推荐

