出现此问题一般是因为在导入模块时顺序上了问题
看如下例子:
./test
├── main.py
├── sub_a.py
├── sub_b.py
main.py
from sub_a import x
print(x + 1)
sub_a.py
from sub_b import b
a = 1
x = a + b
print(x)
sub_b.py
from sub_a import a
b = a + 1
运行:
python module_a.py
Traceback (most recent call last):
File ".\main.py", line 1, in <module>
from sub_a import x
File "~\test\sub_a.py", line 1, in <module>
from sub_b import b
File "~\test\sub_b.py", line 1, in <module>
from sub_a import a
ImportError: cannot import name 'a'
由main.py进入sub_a.py 中执行from sub_b import b语句,在这里程序进入sub_b.py中执行,'sub_a.py’程序暂停执行,此时需要在sub_b.py使用的sub_a.py 中的 a = 1 变量还没有生成,因此出现了上述错误。
要避免错误,要保证在导入模块中内容时,此内容在程序执行到此处时已定义。
module_a.py 改为:
a = 1
from sub_b import b
x = a + b