python模塊交叉引用問題
有下面兩個文件相互引用,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就不會有上述錯誤了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.