python:ImportError: cannot import name ‘xx‘ from ‘xxxx‘

排除命名问题、路径问题等一系列简单问题之后,还报这个错估计是引入顺序的问题(我自己是这样

 

举个例子,假设目录结构和文件内容分别为:

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。

总之就是不要造成套娃行为。。。

 

这个文件结构简单的时候不会犯这问题,但是复杂一些很容易就造成这个现象,并且不容易发现。

 

 

 

 

 

你可能感兴趣的:(python,python,import)