运行python脚本时遇到此错误(由./waf --run调用): TypeError:abspath()只取1个参数(给定2个)
问题是它确实被调用:obj.path.abspath(env)。
这不是一个python问题,因为该代码以前工作得很好,而且它是一个巨大项目(ns3)的一部分,所以我怀疑它已经破了。
然而,在我的设置中必须更改某些内容,因为此代码之前有效,现在却没有。
你能帮我弄清楚为什么会收到这个错误吗?
这是python代码:http://pastebin.com/EbJ50BBt。第61行出现错误。
答案 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代码不能为这种情况做好准备。
问题解决了,感谢大家的帮助