170

你打算如何调试 Flask 中的错误?打印到控制台?向页面发送消息?或者是否有更强大的选项可用于找出出现问题时发生的情况?

4

17 回答 17

170

在开发模式下运行应用程序将在出现错误时在浏览器中显示交互式回溯和控制台。要在开发模式下运行,请设置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以启用调试模式。

Tracebacks 也会打印到运行服务器的终端,无论开发模式如何。

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

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


确保不要使用太宽的除了块。用一个包罗万象的方法包围你的所有代码try... except...将使你想要调试的错误静音。通常这是不必要的,因为 Flask 已经通过显示调试器或 500 错误并将回溯打印到控制台来处理异常。

于 2013-06-26T14:15:59.303 回答
48

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

于 2013-06-26T00:58:45.283 回答
33

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
于 2016-08-04T21:04:52.977 回答
23

还可以使用Flask 调试工具栏扩展来获取嵌入在渲染页面中的更多详细信息。

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
于 2017-01-17T20:59:12.370 回答
16

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

app.run(debug=True)

app.run()

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

于 2018-05-03T03:07:14.783 回答
12

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

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

在为烧瓶应用程序启用调试器后,几乎每个错误都将打印在控制台或浏览器窗口上。如果你想弄清楚发生了什么,你可以使用简单的打印语句,或者你也可以使用 console.log() 来处理 javascript 代码。

于 2018-09-30T17:09:35.247 回答
9

要在烧瓶中激活调试模式,您只需set FLASK_DEBUG=1CMDfor windows 或export FLASK_DEBUG=1Linux 终端上键入,然后重新启动您的应用程序,您就可以开始了!

于 2019-11-12T10:48:47.647 回答
7

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

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

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

FLASK_APP=myapp 
FLASK_ENV=development

现在发出以下命令:

flask run
于 2019-05-14T09:16:46.107 回答
5

对于 Windows 用户:

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

在 Powershell 中使用这些突击队,所有其他东西在 Powershell 中都不起作用。

$env:FLASK_APP = "app"  
$env:FLASK_ENV = "development"
于 2020-07-23T14:31:53.510 回答
3

强制调试模式的快速破解:如果您真的想打开调试器模式。有一个对我有用的快速破解方法。
首先添加下面的代码app.py

# app.py
if __name__ == "__main__":
    app.run(debug=True)

现在,不要使用flask run,尝试python3 app.py runserver -d

# Terminal
python3 app.py runserver -d 

这将强制以调试模式运行服务器。

于 2021-08-10T17:04:22.620 回答
3

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

于 2018-08-26T22:34:12.143 回答
3

使用虚拟环境激活

export FLASK_DEBUG=true

你可以配置

export FLASK_APP=app.py  # run.py
export FLASK_ENV = "development"

开始

flask run

结果

 * Environment: development
 * Debug mode: on
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: xxx-xxx-xxx

如果你改变

export FLASK_DEBUG=false

 * Environment: development
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
于 2020-09-06T08:11:30.753 回答
1

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

于 2019-01-05T10:45:43.207 回答
1

Flask 是 Web 应用程序框架。Flask 是用 Python 语言编写的。通过使用这个框架,我们可以开发网站。它也被称为微框架。它没有用于数据库处理的内置抽象层。它支持将此类功能添加到应用程序的扩展。

Flask 框架使用路由技术来帮助用户记住应用程序的 Url。通过使用路由器,我们可以直接访问所需的页面而无需导航。我们还可以通过添加一些可变部分来动态构建 Url。在 Web 应用程序中,我们为每个操作使用唯一的 Url。

当 run() 方法调用时,我们的 Flask 应用程序将启动。

if __name__=="__main__":
    app.run()

如果我们编写 app.run() 并且我们的应用程序正在开发中,则应该为代码中的每次更改手动重新启动它。因此,对于程序中的每一次更改,我们都必须重新启动服务器并尝试观察更改。如果我们正在开发应用程序,那么我们必须检查我们在应用程序中所做的每项更改是否正确。所以它需要一次又一次地重新启动服务器。如果我们这样做,则需要很多时间。我们都知道时间在 IT 行业非常重要,如果我们不能按时完成项目,那么这对开发人员和从事该项目的团队都不利。

要解决此问题,请启用调试支持。如果代码更改,服务器将自行重新加载。它还将提供一个有用的调试器。通过使用此调试器,它会跟踪应用程序中的错误(如果有)。我们可以通过在运行之前将应用程序对象的调试属性设置为 True 或将调试参数传递给 run() 方法来启用调试模式。所以我们应该写app.run(debug=True)。

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

如果我们编写 app.run(debug=True) 那么它将节省我们的时间,我们不需要一次又一次地运行代码。如果我们写这个,那么它将节省我们的时间,我们可以利用我们的时间进行开发并制作更高效的项目。

我们也可以这样写:

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

它也像上面的代码一样工作,在这我们也不需要一次又一次地运行代码。

于 2021-07-14T06:12:04.653 回答
0

如果您使用的是 VSCode,请按 F5 或转到“运行”和“运行调试”。

于 2022-02-17T20:36:50.027 回答
0

如果您像我一样使用 pycharm 并使用“运行”按钮,您只需修改 pycharm 本身内部的一些设置。IDE 所做的是使用您的选项运行一个命令,只是包装得很好。

右上角 > 编辑配置... > 选中“FLASK_DEBUG”旁边的框。

此选项无需更改代码即可启用 werkzeug 调试器(适用于需要部署的应用程序)。见这里:https ://flask.palletsprojects.com/en/2.0.x/debugging/

完美运行。

于 2021-03-01T01:50:15.807 回答
-4

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

python -m pdb script.py

于 2016-12-08T17:56:49.087 回答