Я работаю с проектом, который содержит около 30 уникальных модулей. Он не был разработан слишком хорошо, поэтому обычно я добавляю циклический импорт при добавлении некоторых новых функций в проект.
Конечно, когда я добавляю циклический импорт, я не знаю об этом. Иногда довольно очевидно, что я сделал циклический импорт, когда я получаю сообщение об ошибке типа AttributeError: 'module' object has no attribute 'attribute'
, где я четко определил 'attribute'
. Но в других случаях код не генерирует исключения из-за способа его использования.
Итак, на мой вопрос:
Можно ли программно определить, когда и где происходит циклический импорт?
Единственное решение, которое я могу придумать, - это иметь модуль importTracking
, который содержит dict importingModules
, функцию importInProgress(file)
, которая увеличивает importingModules[file]
и выдает ошибку, если она больше 1, и функция importComplete(file)
, которая уменьшает importingModules[file]
. Все остальные модули будут выглядеть так:
import importTracking
importTracking.importInProgress(__file__)
#module code goes here.
importTracking.importComplete(__file__)
Но это выглядит действительно противно, должен быть лучший способ сделать это, верно?