Python循環インポートの罠
別のモジュールが互いに参照しあうとImportErrorになるらしい……。
参照
ソースコード
A.py
from B import b def A(): print('A') b()
B.py
from A import a def b(): print('B') a()
実行
$ python A.py
Traceback (most recent call last): File "A.py", line 1, in <module> from B import b File "/tmp/B.py", line 1, in <module> from A import a File "/tmp/A.py", line 1, in <module> from B import b ImportError: cannot import name 'b'
循環インポートというらしい。モジュールが互いに参照しあい無限ループに陥る。
エラー文言がわかりにくい
トレースバックでは循環する経緯を表しているように見える。しかし、最後のエラーがよくわからない。なぜb
が出てきているのか。永久にインポート文以降にはいかないはず。このエラー文言だと循環インポートであるとわかりにくい。
Pythonのエラーがわかりにくいのはいつものことだが……。
所感
相互参照した場合はどうやっても参照できないということか。うまいことやってほしいのだが……。