Python报错TypeError: get()需3个参数却传2个,求代码排查
解决TypeError: get() takes exactly 3 arguments (2 given)的问题
嘿,我来帮你排查这个报错的问题,咱们一步步看:
1. 核心报错原因:视图参数定义错误
你现在把这个视图写成了类方法的形式(带self参数),但从代码结构来看,这应该是一个函数视图。Django调用函数视图时,只会传入request和URL捕获的参数(比如这里的tag),但你的函数定义多了一个self参数,导致实际传递2个参数,函数却要求3个,直接触发了TypeError。
修复方法:把函数定义里的self去掉,改成:
def get(request, tag): print("Tag for tagging :") data_loader = SvnDataLoader() print("Two :") ss = SubsystemRevision.get_subsystem_for_tag(tag) print("Subsystem is %s", ss) # 后面的代码保持不变
如果这确实是类视图的方法(比如继承了View类),那你需要确保类结构正确,并且URL配置使用as_view()来调用,但从render_to_response的用法来看,更像是函数视图,所以第一种修复更合理。
2. 代码里的另一个潜在问题:subprocess参数传递错误
在这行代码里:
pr = subprocess.Popen(['perl', './svntasktag.pl', 'ss'], stdout=subprocess.PIPE)
你传递的是字符串'ss',而不是前面获取的变量ss。这会导致perl脚本接收到的参数是字面量"ss",而不是你期望的SubsystemRevision.get_subsystem_for_tag(tag)的返回值。
修复方法:把'ss'改成变量ss:
pr = subprocess.Popen(['perl', './svntasktag.pl', ss], stdout=subprocess.PIPE)
3. 额外的小提醒
- 你在
try块里定义了context但没有使用,最后返回的是{'data': data},可以把这部分逻辑理顺,避免冗余代码。 - 异常处理里的
TagHistoryMissing和SvnException要确保已经被正确导入,否则会触发新的NameError。
内容的提问来源于stack exchange,提问作者SinghB
相关产品推荐
相关产品推荐

