如何调试Flask应用


134

您打算如何调试Flask中的错误?打印到控制台?向页面闪现消息?还是有一个更强大的选项可用来找出出现问题时发生的情况?


5
没什么神奇的app.run()(打开或关闭调试)。Flask的行为类似于任何其他python应用程序,因此您可以使用调试任何Python应用程序的相同方式对其进行调试。如果要使用日志记录,请使用日志记录。如果要打印,请使用打印件。您甚至可以根据需要使用调试器。
Mark Hildreth 2013年

Answers:


128

出现错误时,以开发模式运行该应用程序将在浏览器中显示交互式回溯和控制台。要在开发模式下运行,请设置FLASK_ENV=development环境变量,然后使用flask run命令(请记住也指向FLASK_APP您的应用程序)。

对于Linux,Mac,Windows的Linux子系统,Windows的Git Bash等:

export FLASK_APP=myapp
export FLASK_ENV=development
flask run

对于Windows CMD,使用set而不是导出:

set FLASK_ENV=development

对于PowerShell,请使用$env

$env:FLASK_ENV = "development"

在Flask 1.0之前,它是由FLASK_DEBUG=1环境变量控制的。

如果您使用的是app.run()方法而不是flask run命令,请传递debug=True以启用调试模式。

不管开发模式如何,都将回溯打印到运行服务器的终端。

如果您使用的是PyCharm,VS Code等,则可以利用其调试器逐步使用带有断点的代码。运行配置可以指向调用app.run(debug=True, use_reloader=False)venv/bin/flask脚本,也可以将其指向脚本并像在命令行中一样使用它。您可以禁用重新加载器,但是重新加载将终止调试上下文,并且您将不得不再次捕获断点。

您还可以通过set_trace在要开始调试的视图中调用来使用pdb,pudb或其他终端调试器。


确保不要使用太宽的积木。将所有代码都包含在“包罗万象”中try... except...将使您想要调试的错误静音。一般来说,这是不必要的,因为Flask已经可以通过显示调试器或500错误并将回溯打印到控制台来处理异常。


38

您可以按如下所述app.run(debug=True)用于Werkzeug调试器 编辑,我应该知道。


7
实际上,当您与debug=True您一起跑步时,实际上是在使用Werkzeug调试器,因此它不是“或非” ;-)
肖恩·维埃拉

哈,你是对的。我想我应该查看Flask的setup.py的要求。我使用它的修改后的副本在GAE下工作,您必须手动初始化Werkzeug。
bnlucas

我已经设置了app.run(debug = True),如果我确实将xyz打印到哪里打印,谢谢
Kimmy 2013年

使用print 'xyz'将打印到控制台。如果要在浏览器中进行调试,则需要在要调试的位置上强制执行错误。raise Exception('xyz')。这将触发调试以在浏览器窗口中输出。
bnlucas 2013年

25

1.1.x文档中,您可以通过将环境变量导出到Shell提示符来启用调试模式:

export FLASK_APP=/daemon/api/views.py  # path to app
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0

4
如果它解释了实际的调试模式,则此答案将更有用。它不仅能在浏览器中进行调试吗?不幸的是,由于我正在使用REST API,因此这对我没有太大帮助。
Michael Scheper

我在哪里放那个片段?
mLstudent33

1
@ mLstudent33在外壳中
爱德华·洛佩兹

15

人们还可以使用Flask Debug Toolbar扩展程序来获取嵌入在渲染页面中的更多详细信息。

from flask import Flask
from flask_debugtoolbar import DebugToolbarExtension
import logging

app = Flask(__name__)
app.debug = True
app.secret_key = 'development key'

toolbar = DebugToolbarExtension(app)

@app.route('/')
def index():
    logging.warning("See this message in Flask Debug Toolbar!")
    return "<html><body></body></html>"

启动应用程序,如下所示:

FLASK_APP=main.py FLASK_DEBUG=1 flask run

12

如果您使用的是Visual Studio Code,请替换

app.run(debug=True)

app.run()

当打开内部调试器禁用VS Code调试器时,它会出现。


3
您可以分享一个工作设置示例吗?我已经在环境中定义了FLASK_APP,默认配置不起作用。我尝试了这个-pastebin.com/v8hBQ2vv和许多类似的排列,但无济于事。
布兰登·杜贝

12

如果要调试flask应用程序,则只需转到flask应用程序所在的文件夹。不要忘了激活您的虚拟环境,并将控制台行中的行更改“ mainfilename”粘贴到flask主文件。

export FLASK_APP="mainfilename.py"
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0

启用flask应用程序的调试器后,几乎所有错误都会打印在控制台或浏览器窗口上。如果您想弄清楚发生了什么,可以使用简单的打印语句,也可以将console.log()用于javascript代码。


5

python-dotenv在虚拟环境中安装。

在项目根目录中创建一个.flaskenv。用项目根目录,是指包含您的app.py文件的文件夹

在此文件中写入以下内容:

FLASK_APP=myapp 
FLASK_ENV=development

现在发出以下命令:

flask run

对我不起作用...它一直显示调试模式:关
Federico Gentile

3

要在Flask中激活调试模式,您只需FLASK_DEBUG=1CMDWindows 上键入set 并FLASK_DEBUG=1在Linux terminal上导出,然后重新启动您的应用程序就可以了!


2

快速提示-如果您使用的是PyCharm,请转到Edit Configurations=> Configurations并启用FLASK_DEBUG复选框,然后重新启动Run


2
您可能想要添加此复选框仅在PyCharm Professional中可用。参考:jetbrains.com/help/pycharm/…–
cyroxx

1

在开发环境中使用记录器和打印语句,在生产环境中可以进行岗哨。


1

对于Windows用户:

打开Powershell并cd进入您的项目目录。

在Powershell中使用这些突击队,其他所有东西在Powershell中将无法使用。

$env:FLASK_APP = "app"  
$env:FLASK_ENV = "development"

-1

如果您在本地运行它并希望能够逐步执行代码:

python -m pdb script.py


这根本不适用于烧瓶应用程序
CornSmith
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.