调用__call__时提示缺少位置参数'context',如何排查?
问题分析与修复:TypeError: call() missing required 'context'参数
报错根源
直接原因就是测试代码的调用没有传入新增的context参数:
Subparser类的__call__方法近期新增了第三个必填参数context,但测试里的调用mts.get_subparser()(mts, b'')只传了obj(mts)和data(b'')两个参数,完全没提供context,这才触发了参数缺失的TypeError。
对比业务代码里的正确调用:在SubparserMixin的on_packet方法中,调用解析逻辑时是明确传递了self.context的(也就是PacketContext实例),说明业务逻辑的调用是符合新参数要求的,只有测试代码没跟上修改。
修复方案
有两种简单的修复方式:
- 直接复用测试对象的
context属性(如果mts是SubparserMixin的实例):# 补充传入mts的context参数 mts.get_subparser()(mts, b'', mts.context) - 如果测试需要自定义上下文,可以手动创建
PacketContext实例传入:from your_module import PacketContext # 按需设置capture_tstamp或其他属性 test_context = PacketContext(capture_tstamp=1699999999) mts.get_subparser()(mts, b'', test_context)
补充说明
Subparser类__call__方法的参数添加方式是合理的——业务逻辑中确实需要把PacketContext传递给parse_er_data方法,用来携带包捕获时间戳这类上下文信息,所以问题不在方法定义,而是测试调用未同步更新。
内容的提问来源于stack exchange,提问作者Patrick_Chong
相关产品推荐
相关产品推荐

