TypeError:abspath()只取1个参数(给定2个)

时间:2012-07-06 10:08:27

标签: c++ python networking

运行python脚本时遇到此错误(由./waf --run调用): TypeError:abspath()只取1个参数(给定2个)

问题是它确实被调用:obj.path.abspath(env)。

这不是一个python问题,因为该代码以前工作得很好,而且它是一个巨大项目(ns3)的一部分,所以我怀疑它已经破了。

然而,在我的设置中必须更改某些内容,因为此代码之前有效,现在却没有。

你能帮我弄清楚为什么会收到这个错误吗?

这是python代码:http://pastebin.com/EbJ50BBt。第61行出现错误。

3 个答案:

答案 0 :(得分:2)

方法Node.abspath()的文档声明它不需要额外的env参数,我通过检查git历史记录确认它从未做过。我建议更换

if not (obj.path.abspath().startswith(launch_dir)
        or obj.path.abspath(env).startswith(launch_dir)):
    continue

if not obj.path.abspath().startswith(launch_dir):
    continue

如果此代码之前有效,这可能是由于or表达式的第一个运算符始终为True,因此第二个运算符从未执行过。无论如何,这似乎是你代码中的一个错误。

答案 1 :(得分:0)

您应该在回溯中拥有文件名和行号。转到那个文件和行,找出“obj”和“obj.path.abspath”。一个简单的解决方案是将违规行放在try / except块中以打印(或记录)更多信息,即:

# your code here
try:
    whatever = obj.path.abspath(env)
except Exception, e:
    # if you have a logger
    logger.exception("oops : obj is '%s' (%s)" % (obj, type(obj)))
    # else 
    import sys
    print >> sys.stderr, "oops, got %s on '%s' (%s)" % (e, obj, type(obj))
    # if you can run this code directly from a shell,
    # this will send you in the interactive debugger so you can
    # inspect the offending objet and the whole call stack.
    # else comment out this line
    import pdb; pdb.set_trace()

    # and re-raise the exception
    raise

我敢打赌,“obj.path”不是python'os.path'模块,而“obj.path.abspath”是一个只将“self”作为参数的实例方法。

答案 2 :(得分:0)

问题来自于显然waf不喜欢符号链接的事实,python代码不能为这种情况做好准备。

问题解决了,感谢大家的帮助