0

Python メソッド (2.7.2) を呼び出すときに、# of parameters について TypeError が発生します。私がオンラインで見つけた同様の質問のほとんどは、人々が「自己」もパラメーターであることを忘れたときに発生します (サンプル SO 質問)。または、誰かが引数を連結するのを忘れた場合 (ここのように)。

これも「自己」の問題かどうかはわかりませんが、違うようです。基本的に、十分に数えているにもかかわらず、十分な引数がないというエラーが発生しています。私のトレースでは:

-> message += XMLProcessor(zf, root, filepath, tag_type, display_name, containers, depth, message, username)
(Pdb) n
TypeError: 'XMLProcessor() takes exactly 9 arguments (8 given)'

今、これを何度も数えましたが、9 つの引数があることを誓います。しかし、私は間違っているか、重要な何かを見逃している可能性がありますか? このメソッドはクラスの一部ではないので、「自己」は問題ではないと思います...何かの基本的な理解が欠けているように感じますが、何がわかりません。

########## Function: XMLProcessor #################
# This does the work of examining the XML and traversing it.
####################################################
def XMLProcessor(zf, root, filepath, tag_type, display_name, containers, depth, message, username):

この場合、なぜ 9 != 9 なのか、誰かに光を当てることができますか?

ありがとう!


更新 #1

したがって、これが何を意味するのかわかりませんが、Martijn が提供したコードをデバッガーで実行します。

(Pdb) import inspect, dis;
(Pdb) dis.dis(inspect.currentframe().f_code)
  1           0 LOAD_NAME                0 (dis)
              3 LOAD_ATTR                0 (dis)
              6 LOAD_NAME                1 (inspect)
              9 LOAD_ATTR                2 (currentframe)
             12 CALL_FUNCTION            0
             15 LOAD_ATTR                3 (f_code)
             18 CALL_FUNCTION            1
             21 PRINT_EXPR          
             22 LOAD_CONST               0 (None)
             25 RETURN_VALUE        
(Pdb) 

アップデート #2

まだ dis の速度を上げようとしていますが、コードが正確に 9 つの引数を無視しようとしているのは皮肉なことだと思います。余談ですが、*.pyc ファイルをクリアしてコードを再実行しました...助けはありません:

(Pdb) XMLProcessor(zf, root, filepath, tag_type, display_name, containers, depth, message, username)
*** TypeError: XMLProcessor() takes exactly 9 arguments (8 given)
(Pdb) XMLProcessor(zf, root, filepath, tag_type, display_name, containers, depth, message, username, '')
*** TypeError: XMLProcessor() takes exactly 9 arguments (10 given)

解決しました!

コメントで指摘したように、これは古くなったバイトコードに関連するものではなく (将来的に調査する必要があるように思えます)、コーダーの見落としが原因でした。私は他の誰かのレガシー コードを変更していますが、XMLProcessor が再帰的なメソッドであることがわかりました。そして、新しい引数に対する内部の再帰的なメソッド呼び出しを変更しませんでした。したがって、「8」引数エラーは実際には内部呼び出しで発生しましたが、更新 #2 の「10」引数エラーは外部呼び出しで発生しました。外部呼び出しの前に trace() を設定していたので、私には両方のエラーが同じように見えました。助けてくれてありがとう - 私はデバッグ技術に取り組む必要があり、そこからいくつかの便利なトリックを学びました.

4

1 に答える 1