私は約30のユニークなモジュールを含むプロジェクトで働いています。あまりうまく設計されていなかったので、プロジェクトにいくつかの新しい機能を追加するときに循環インポートを作成するのが一般的です。
もちろん、循環インポートを追加すると、気づきません。AttributeError: 'module' object has no attribute 'attribute'
明確に定義した場所のようなエラーが発生したときに、循環インポートを行ったことが非常に明白な場合があります'attribute'
。ただし、使用方法が原因でコードが例外をスローしない場合もあります。
だから、私の質問に:
循環インポートがいつどこで発生しているかをプログラムで検出することは可能ですか?
これまでに考えられる唯一の解決策importTracking
は、dictを含むモジュール、インクリメントimportingModules
する関数、 1より大きい場合はエラーをスローする関数、およびデクリメントする関数を用意することです。他のすべてのモジュールは次のようになります。importInProgress(file)
importingModules[file]
importComplete(file)
importingModules[file]
import importTracking
importTracking.importInProgress(__file__)
#module code goes here.
importTracking.importComplete(__file__)
しかし、それは本当に厄介に見えます、それを行うためのより良い方法がなければなりませんよね?