排除命名问题、路径问题等一系列简单问题之后,还报这个错估计是引入顺序的问题(我自己是这样
举个例子,假设目录结构和文件内容分别为:
a.py
b.py
# a.py
var_a = 1
# b.py
var_b = 2
假设想在 a.py 内引用 b.py 内的变量 var_b
其实要引用的话直接import就行:
#a.py
from b import var_b
var_b = var_b + 1 # 随便进行个什么操作用一下var_b
问题出现
假设现在想在 a.py 内引用 b.py的变量var_b 并且在 b.py 内引用 a.py的变量var_a
这个时候可能会出现问题,假设是以这样的引用顺序:
#a.py
from b import var_b
var_b = var_b + 1 # 调用b中的变量
var_a = 1 # 本文件内定义的变量
# b.py
from a import var_a
var_a = var_a + 1 # 调用a中的变量
var_b = 2 # 本文件内定义的变量
假设运行 a.py ,它就会引起 ImportError。
原因
按照文件调用来推:
首先运行 a.py,它第一行调用了 b.py。
这时就会运行 b.py,而 b.py 第一行是调用 a.py。
直接俄罗斯套娃。
改正方法
要看你先运行的哪个文件,假如先运行 a.py,那么修改 b.py 为:
# b.py
var_b = 2 # 本文件内定义的变量
from a import var_a
var_a = var_a + 1 # 调用a中的变量
假如先运行 b.py,那么修改 a.py。
总之就是不要造成套娃行为。。。
这个文件结构简单的时候不会犯这问题,但是复杂一些很容易就造成这个现象,并且不容易发现。