我正在处理一个包含大约 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__)
但这看起来真的很讨厌,必须有更好的方法来做到这一点,对吧?