模块级循环导入¶
ID: py/unsafe-cyclic-import
Kind: problem
Security severity:
Severity: error
Precision: high
Tags:
- reliability
- correctness
- types
Query suites:
- python-security-and-quality.qls
循环导入是一个 import
,它导入另一个模块,而该模块(可能间接)导入包含 import
语句的模块。如果循环导入中的所有导入都发生在模块级别,那么在模块完成初始化的一半时,该模块将被导入。这可能会导致意外的错误,因为被导入的模块的部分可能尚未存在。
除了可能的错误之外,循环导入表明两个模块是循环依赖的。这意味着这两个模块无法独立测试,并且会使理解系统架构变得更加困难。
建议¶
可以通过删除任何一个导入来打破循环。如果只有一个函数或方法需要导入,那么考虑将其移动到另一个模块并删除导入。如果这两个模块紧密相连,那么将相互依赖的部分移动到第三个模块,并让这两个原始模块都导入该模块。