実行top_level_script.py
すると、次のようなスタック トレースで例外が発生しました。
File "top_level_script.py", line 114, in main
…
File "top_level_script.py", line 91, in func1
...
File "top_level_script.py", line 68, in func2
**kwargs)
File "/home/max/.../cccc/ffff/mmmm.py", line 69, in some_func
obj = SomeClass(…)
File "mmm/ttt/bbb/core.py", line 17, in __init__
File "/home/max/.../pppp/pppp.py", line 474, in func
...
File "/home/max/.../pppp/pppp.py", line 355, in some_func
...
mmm/ttt/bbb/core.py
には相対パスがあり、その上下のフレームには絶対パスがあることに注意してください。また、 の 17 行目の出力はなく、__init__
呼び出されたコードは「古い」ものでした。変更したばかりですが、古いコードが呼び出されていました。したがって、例外です。
Python のインポート メカニズムは、いまだに混乱を招くことがあります。何が起きているのcore.py
か、そのフレームに表示されている相対パスの重要性を説明できる人はいますか?
いくつかいじくり回した後、私の仮説は、python が何らかの形で を呼び出しているというものでした.pyc
(したがって、以下の行にソースは示されていません)。ファイルをいじった後(つまり、変更して保存した後)、次のようになりました。
File "top_level_script.py", line 114, in main
…
File "top_level_script.py", line 91, in func1
...
File "top_level_script.py", line 68, in func2
**kwargs)
File "/home/max/.../cccc/ffff/mmmm.py", line 69, in some_func
obj = SomeClass(…)
File "/home/max/.../mmm/ttt/bbb/core.py", line 17, in __init__
...
File "/home/max/.../pppp/pppp.py", line 474, in func
...
File "/home/max/.../pppp/pppp.py", line 355, in some_func
...
今、私はその効果を再現することはできませんが、何が起こったのか誰かが知っているかどうかはまだ知りません.