標籤:python 匯入迴圈
在用django中調用某個函數時,報錯:
can‘t import get_user_info
發現,匯入了這個模組啊,為什麼匯入不成功呢?經人提示,是匯入迴圈的問題。 開啟《python核心編程》模組的匯入迴圈那一章,看一下就明白了。
類比一個簡單的情境
a.py中有一個函數a(),需要調用b.py中的函數b(), 而b.py中的函數c()又需要調用a(),這就出現了迴圈匯入。代碼如下所示:
from b import bprint ‘---------this is module a.py----------‘def a(): print "hello, a" b()a()
from a import aprint ‘----------this is module b.py----------‘def b(): print "hello, b"def c(): a()c()
運行:python a.py,報錯如下:
zy@zy:~/code/python/test/import$ python a.pyTraceback (most recent call last): File "a.py", line 1, in <module> from b import b File "/home/zy/code/python/test/import/b.py", line 1, in <module> from a import a File "/home/zy/code/python/test/import/a.py", line 1, in <module> from b import bImportError: cannot import name b
在a.py中匯入b.b(),在匯入b檔案的時候,又要去匯入a檔案,a檔案又要去匯入b檔案,這是一個死迴圈了,自然是不允許的。
解決方案:
- 可以將匯入模組的語句放在局部(函數)裡。如下所示:
print ‘---------this is module a.py----------‘def a(): print "hello, a" from b import b b()a()
rint ‘----------this is module b.py----------‘def b(): print "hello, b"def c(): from a import a a()c()
運行:python a.py,結果如下:
zy@zy:~/code/python/test/import$ python a.py---------this is module a.py----------hello, a----------this is module b.py-------------------this is module a.py----------hello, ahello, bhello, ahello, bhello, b
python 匯入迴圈問題