python 导入循环问题

在用django中调用某个函数时,报错:

can‘t import get_user_info

发现,导入了这个模块啊,为什么导入不成功呢?经人提示,是导入循环的问题。 打开《python核心编程》模块的导入循环那一章,看一下就明白了。

模拟一个简单的场景

a.py中有一个函数a(),需要调用b.py中的函数b(), 而b.py中的函数c()又需要调用a(),这就出现了循环导入。代码如下所示:

from b import b
print ‘---------this is module a.py----------‘
def a():
    print "hello, a"
    b()

a()
from a import a
print ‘----------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.py
Traceback (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 b
ImportError: 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, a
hello, b
hello, a
hello, b
hello, b
时间: 2024-11-09 02:00:18

python 导入循环问题的相关文章

第2课,python while循环的使用

引言: 上次课学习了python turtle库的基本使用,向前向后和转向.本次课需要画多个图形,简单的东西多起来就变得不简单了.0/1是简单的,但却能组成丰富多彩的多媒体世界. 课程内容: 1. 再看python turtle库 2. 画一个正方形,画两个正方形,画多个正方形 3. 画数轴,画平面直角坐标系 感谢网络图片分享: 再看 python turtle 库: 通过导入库,画一个圈,并输出一句:“实不相瞒,其实我很帅!!!” 1 >>> import turtle as t #在

Python for 循环

Python for 和其他语言一样,也可以用来循环遍历对象,本文章向大家介绍Python for 循环的使用方法和实例,需要的朋友可与参考一下. 一个循环是一个结构,导致第一个程序要重复一定次数.重复不断循环的条件仍是如此.当条件变为假,循环结束和程序的控制传递给后面的语句循环. for循环: 在Python for循环遍历序列的任何物品,如一个列表或一个字符串,有能力. for循环语法是: for iterating_var in sequence: statements(s) 如果一个序列

Python的循环

循环是一个结构,导致一个程序要重复一定的次数 条件循环也一样,当条件变为假,循环结束 For循环 在python for循环遍历序列,如一个列表或一个字符. for循环语法:   ——for iterating_var in sequence: statements(s) 注:如果一个序列包含一个表达式列表,他是第一个执行,然后,该序列中的第一项赋值给迭代变量 iterating_var.接下来执行语句块.列表中的每个项目分配到 iterating_var,代码块被执行,且整个序列被耗尽, 注:

python之循环

循环 要计算1+2+3,我们可以直接写表达式: >>> 1 + 2 + 3 6 要计算1+2+3+...+10,勉强也能写出来. 但是,要计算1+2+3+...+10000,直接写表达式就不可能了. 为了让计算机能计算成千上万次的重复运算,我们就需要循环语句. Python的循环有两种,一种是for...in循环,依次把list或tuple中的每个元素迭代出来,看例子: names = ['Michael', 'Bob', 'Tracy'] for name in names: prin

Python While 循环语句

Python While循环语句 Python 编程中while语句用于循环执行程序,即在一些条件下,循环执行一些段程序,以处理需要重复处理的相同任务. 执行语句可以是单个语句或语句块. 判断条件可以是任何表达式,任何非零.或非空(null)的值均为true. 当判断条件假false时,循环结束. 实例: #!/usr/bin/python count = 0 while ( count < 9): print 'The count is:', count count = count +1 pr

Python导入模块的三种形式

Python导入模块的3中方式: 1.import module_name 这样在程序里就可以通过module_name.metnod_name()的方式访问模块里的函数了 Example: >>>import math >>> math.sqrt(5) 2.23606797749979 >>> math.pow(2,3) 8.0 >>> 2.from module_name import * 这样同样可以导入模块,且可以通过方法名直

python导入上级目录中的模块

python导入同级别模块很方便: import xxx 要导入下级目录页挺方便,需要在下级目录中写一个__init__.py文件 from dirname import xxx 要导入上级目录,可以使用sys.path: 首先sys.path的作用是:当使用import语句导入模块时,解释器会搜索当前模块所在目录以及sys.path指定的路径去找需要import的模块 所以改变思路,直接把上级目录加到sys.path里:sys.path.append('../') from fatherdir

Python条件循环

if语句: if elif else: Python中if语句的一半表现形式: 1 if p_1: 2 print('is 1') 3 elif p_2: 4 print('is 2') 5 else: 6 print('is 3') 如果条件满足p_1将会输出is 1,如果条件不满足p_1满足p_2的话将会输出is 2,如果以上两个条件都不满足的话将会执行第三个结果is 3,所以if的关键语句为:if  elif  else. 注意: 每个条件后面都要使用冒号:,表示接下来满足条件后要执行的语

python 导入库问题

最后的解决如下:不知道有没有多余的地方 from django.conf import settings from sys import path path.extend(['/home/zoueswebsite', '/home/zoueswebsite/blog', '/home/zoueswebsite/zoueswebsite']) import os os.environ['DJANGO_SETTINGS_MODULE'] = 'zoueswebsite.settings' 第一版本错