仔细看项目结构和每个py文件的代码与注释,画图帮助理解,会有直观的理解

解决办法

方法一:

移动import语句的位置(推荐指数:一颗星)我的例子采用这种方法

将impot放到后面去,放到最后,至少是不依赖这个模块的代码后面。也就是将import语句放到run之后,就不报错了。

方法二:

直接用import来引用(推荐指数:两颗星)

将 from a import b 改成 import a.b ,据说就不会有问题了。

方法三:

设计构架,避免循环引用(推荐指数:三颗星)

尽量避免这种情况。出现这种情况就是代码的布局有问题。对现有的模块就行拆分或者是合并,保证模块尽量独立。

所有的模块最后都有一个层级,不要引用你同级或者高级的模块。

下面是包导入的简图,可以看出app这个python文件夹内出现了一个循环。

 

项目结构图与运行脚本路径:

 代码:

from app import app


if __name__ == '__main__':
    app.run(debug=True)

循环引用错误是因为from app import routes这一句放在了app = Flask(__name__) 前面

from flask import Flask    # 从flask包中导入Flask类

app = Flask(__name__)   # 将Flask类的实例 赋值给名为 app 的变量。这个实例成为app包的成员。
# print('等会谁(哪个包或模块)在使用我:', __name__)

from app import routes   # 从app包中导入模块routes
# 注:上面两个app是完全不同的东西。两者都是纯粹约定俗成的命名,可重命名其他内容。
# 奇怪:该行代码放到图片代码中第七行会报错?因为会造成循环引用

from app import app  # 从app包中导入 app 这个实例

# 2个路由
@app.route('/')
@app.route('/index')
# 1个视图函数
def index():
	return "Hello,World!"   # 返回一个字符串

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐