python 导入循环问题

来源:互联网 发布:mysql delete 编辑:程序博客网 时间:2024/05/18 22:16

在用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

0 0