如何调试 Flask 中的错误? 打印到控制台? 向页面闪现消息? 或者是否有更强大的选项可以在出现问题时找出发生了什么?
出现错误时,在调试模式下运行应用程序将在浏览器中显示交互式回溯和控制台。从 Flask 2.2 开始,要在调试模式下运行,请将
--app
和 --debug
选项传递给 flask
命令。
$ flask --app example --debug run
在 Flask 2.2 之前,这是由
FLASK_ENV=development
环境变量控制的。您仍然可以使用 FLASK_APP
和 FLASK_DEBUG=1
代替上面的选项。
对于 Linux、Mac、Windows 上的 Linux 子系统、Windows 上的 Git Bash 等:
$ export FLASK_APP=example
$ export FLASK_DEBUG=1
$ flask run
对于 Windows CMD,请使用
set
而不是导出:
set FLASK_DEBUG=1
对于 PowerShell,请使用
$env
:
$env: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 错误并将回溯打印到控制台来处理异常。
还可以使用 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
如果您使用的是 Visual Studio Code,请替换
app.run(debug=True)
与
app.run()
打开内部调试器禁用 VS Code 调试器时会出现。
如果您想调试 Flask 应用程序,只需转到 Flask 应用程序所在的文件夹即可。不要忘记激活您的虚拟环境并将控制台中的行粘贴到“mainfilename”更改为 Flask 主文件。
export FLASK_APP="mainfilename.py"
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0
为 Flask 应用程序启用调试器后,几乎每个错误都会打印在控制台或浏览器窗口上。 如果您想弄清楚发生了什么,可以使用简单的 print 语句,也可以使用 console.log() 作为 javascript 代码。
当作为
python app.py
而不是 flask
命令运行时,您可以将 debug=True
传递给 app.run
。
if __name__ == "__main__":
app.run(debug=True)
$ python app.py
要在 Flask 中激活调试模式,您只需在 Windows 的
set FLASK_DEBUG=1
上输入 CMD
,或者在 Linux 终端上输入 export FLASK_DEBUG=1
,然后重新启动您的应用程序,就可以了!!
在您的虚拟环境中安装
python-dotenv
。
在项目根目录中创建一个 .flaskenv。项目根目录是指包含 app.py 文件的文件夹
在此文件中写入以下内容:
FLASK_APP=myapp
FLASK_ENV=development
现在发出以下命令:
flask run
使用虚拟环境激活
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)
对于 Windows 用户:
打开 Powershell 并 cd 到您的项目目录。
在 Powershell 中使用这些突击队,所有其他东西在 Powershell 中都不起作用。
$env:FLASK_APP = "app"
$env:FLASK_ENV = "development"
如果您有 PyCharm Professional,则可以创建 Flask 服务器运行配置并启用
FLASK_DEBUG
复选框。转到 Run > Edit Configurations
,选择或创建 Flask server
配置,然后启用 FLASK_DEBUG
复选框。单击“确定”,然后单击“运行”按钮。
您可以使用以下命令安装 python-dotenv
pip install python-dotenv
然后创建 .flask_env
或 .env
文件
文件的内容可以是:
FLASK_APP=myapp
FLASK_DEBUG=True
除了其他答案之外,如果您仍然没有看到日志消息,您可能需要调整应用程序的记录器级别:
app.logger.setLevel(logging.DEBUG)
@app.route('/'):
def index():
app.logger.info('Request made')
...
我相信日志级别默认为
WARNING
。