python循环导入的问题
Posted Felix Wang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python循环导入的问题相关的知识,希望对你有一定的参考价值。
1、问题
循环导入,代码如下:
from c import c def b(): print(‘b‘)
from b import b def a(): # from b import b print(‘a‘) b()
from a import a def c(): print(‘c‘) a()
from c import c from a import a from b import b c() b() a()
然后执行start.py,发现报错
Traceback (most recent call last): File "/home/felix/PycharmProjects/DRF/test/u.py", line 5, in <module> from c import c File "/home/felix/PycharmProjects/DRF/test/c.py", line 8, in <module> from a import a File "/home/felix/PycharmProjects/DRF/test/a.py", line 16, in <module> from b import b File "/home/felix/PycharmProjects/DRF/test/b.py", line 8, in <module> from c import c ImportError: cannot import name ‘c‘
原因分析:因为a导入b,b导入c,c导入a的时候,都还没有执行到函数定义的代码,所以找不到模块。
2、解决方法一:
改用导入包的方式,不用导入具体函数的方式
import b def a(): print(‘a‘) b.b()
import c def b(): print(‘b‘)
import a def c(): print(‘c‘) a.a()
from c import c from a import a from b import b c() b() a()
3、解决方法二:
在函数内导入,不在全局导入
def a(): print(‘a‘) from b import b b()
import c def b(): print(‘b‘)
def c(): print(‘c‘) from a import a a()
from c import c from a import a from b import b c() b() a()
4、解决方案三:
重构代码,合并
def b(): print(‘b‘) def a(): print(‘a‘) b() def c(): print(‘c‘) from a import a a()
from abc_combine import a, b, c c() b() a()
循环导入问题的解决方案有三种,推荐方案三重构代码,如果实在不想重构代码,建议方案二。
以上是关于python循环导入的问题的主要内容,如果未能解决你的问题,请参考以下文章