0

Python スクリプト (./waf --run によって呼び出される) の実行中にこのエラーが発生します: TypeError: abspath() は正確に 1 つの引数を取ります (2 つ指定)

問題は、それが実際に obj.path.abspath(env) で呼び出されることです。

これは Python の問題ではありません。そのコードは以前は完全に機能していましたが、巨大なプロジェクト (ns3) の一部であるため、これが壊れているとは思えません。

ただし、このコードは以前は機能していましたが、現在は機能していないため、設定で何かが変更されたに違いありません。

このエラーが発生する理由を理解するのを手伝ってもらえますか?

Python コードは次のとおりです: http://pastebin.com/EbJ50BBt。エラーは61行目で発生します。

4

3 に答える 3

2

メソッドのドキュメントには、追加のパラメーターを使用Node.abspath()しないと記載されており、git の履歴を確認して、追加のenvパラメーターを使用しないことを確認しました。交換することをお勧めします

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であったために、2 番目の演算子が実行されなかったことが原因です。とにかく、コードのバグのようです。

于 2012-07-06T11:08:00.180 に答える
0

問題は、明らかにwafがシンボリックリンクを好まないという事実に起因していました。そのような場合に備えてPythonコードを準備してはなりません。

問題は解決しました、皆さんの助けに感謝します

于 2012-07-07T00:28:13.117 に答える
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」のみを取るインスタンスメソッドです。

于 2012-07-06T10:23:39.550 に答える