Python3循环导入问题求助:无需移出aError的解决方案
解决Python循环导入问题(无需移出aError)
方法1:调整a.py的导入顺序
将对b、c模块的导入操作,移至aError类定义之后。Python模块导入时会按顺序执行顶层代码,先定义aError再导入b、c,就能保证b、c从a模块导入aError时,该类已经存在,不会触发循环导入错误。
修改后的a.py:
class aError(Exception): ... # 移至aError定义后导入 from b import bb from c import cc def aa(): try: bb() cc() except aError: ... ...
方法2:在b.py和c.py中使用模块级导入
通过导入整个a模块而非直接导入aError类,利用Python模块对象的延迟绑定特性,避免在导入阶段就依赖未定义的类。
修改后的b.py:
import a class bError(a.aError): ... def bb(): raise bError() ...
修改后的c.py:
import a class cError(a.aError): ... def cc(): raise cError() ...
方法3:延迟导入(将导入放在函数内部)
如果不想调整顶层代码顺序,可以把对b、c模块的导入延迟到aa函数内部执行。只有当调用aa()时才会加载b和c,此时aError已经完全定义,不会出现导入问题。
修改后的a.py:
class aError(Exception): ... def aa(): # 延迟导入,函数执行时才加载依赖 from b import bb from c import cc try: bb() cc() except aError: ... ...
内容的提问来源于stack exchange,提问作者MattyOstrowsky
相关产品推荐
相关产品推荐

