嵌套关键字参数触发TypeError:requests.Session.send调用异常分析
问题原因解析
核心问题:参数传递链不兼容
你的垫片send函数接收了自定义参数myflag,但这个参数并不在requests.Session.send以及它后续调用的适配器方法的参数列表里:
- 当你把
**kwargs原封不动传给super().send()时,myflag会跟着一起传递给父类的send方法 requests.Session.send本身不会处理这个陌生参数,会直接把所有收到的kwargs转发给底层的适配器(比如HTTPAdapter.send)- 而适配器的
send方法只认它自己定义的参数(像timeout、verify、proxies这些),碰到myflag这种没定义过的参数,自然就抛出TypeError了
为什么移除myflag就能解决?
myflag是你的垫片自己加的扩展参数,不属于requests原生方法的参数约定。在调用父类方法前删掉它,相当于:
- 把垫片专属的参数拦截下来,只传父类方法能识别的参数
- 遵守了函数调用的参数规矩,避免把“不合法的参数”传给不支持它的下游方法
额外提示
如果你的垫片需要用myflag做逻辑判断,记得在移除它之前完成相关处理,再把清理后的kwargs传给父类的send方法。
内容的提问来源于stack exchange,提问作者Rob Grossman
相关产品推荐
相关产品推荐

