有下面两个文件相互引用,Python解释器报错。
#foo.py:
from bar import bar_var
#bar.py:
from foo import foo_var
bar_var=2
import foo会产生如下错误:
>>> import foo
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "foo.py", line 1, in ?
from bar import bar_var
File "bar.py", line 1, in ?
from foo import foo_var
ImportError: cannot import name foo_var
>>>
但并非是因为交叉引用而报错,而是引用不存在!
导入一个模块时,发现已经导入,就不会再做一次导入。
from foo import foo_var
相当于运行foo.py, 然后令foo_var = foo.foo_var
这句会发现foo已经导入,但是foo_var=1还没有执行到,
所以bar.foo_var = foo.foo_var就会出错。
解决办法就是不要全局导入,可改为局部作用域内导入。
如果将from XXX import YYY改为import XXX就不会有上述错误了。
#foo.py:
from bar import bar_var
#bar.py:
from foo import foo_var
bar_var=2
import foo会产生如下错误:
>>> import foo
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "foo.py", line 1, in ?
from bar import bar_var
File "bar.py", line 1, in ?
from foo import foo_var
ImportError: cannot import name foo_var
>>>
但并非是因为交叉引用而报错,而是引用不存在!
导入一个模块时,发现已经导入,就不会再做一次导入。
from foo import foo_var
相当于运行foo.py, 然后令foo_var = foo.foo_var
这句会发现foo已经导入,但是foo_var=1还没有执行到,
所以bar.foo_var = foo.foo_var就会出错。
解决办法就是不要全局导入,可改为局部作用域内导入。
如果将from XXX import YYY改为import XXX就不会有上述错误了。