你是如何在Flask中调试错误的?打印到控制台? Flash消息到页面?或者是否有更强大的选项可以找出出现问题时发生的事情?
答案 0 :(得分:88)
在发生模式下运行应用程序时,如果出现错误,将在浏览器中显示交互式追踪和控制台。要在开发模式下运行,请设置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错误并将回溯打印到控制台来处理异常。
答案 1 :(得分:22)
您可以使用app.run(debug=True)
进行Werkzeug Debugger 编辑,如下所述,我应该知道。
答案 2 :(得分:14)
从0.11
documentation,您可以通过导出环境变量来启用调试模式:
export FLASK_APP=/daemon/api/views.py # path to app
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0
答案 3 :(得分:9)
如果您使用的是Visual Studio Code,请替换
app.run(debug=True)
与
app.run()
打开内部调试器时会出现禁用VS Code调试器的情况。
答案 4 :(得分:8)
还可以使用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
答案 5 :(得分:3)
如果要调试flak应用程序,只需转到flask应用程序所在的文件夹,别忘了激活您的虚拟环境并将行粘贴到控制台中,将“ mainfilename”更改为flask main文件。
export FLASK_APP="mainfilename.py"
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0
启用烧瓶应用程序的调试器后,几乎所有错误都会打印在控制台或浏览器窗口上。 如果您想弄清楚是什么,可以使用简单的打印语句,也可以将console.log()用于javascript代码。
答案 6 :(得分:2)
要在烧瓶中激活调试模式,只需在Windows的FLASK_DEBUG=1
上键入set CMD
,然后在Linux终端上导出FLASK_DEBUG=1
,然后重新启动应用程序即可!! < / p>
答案 7 :(得分:2)
对于Windows用户:
打开Powershell并cd进入您的项目目录。
在Powershell中使用这些突击队,其他所有东西在Powershell中将无法使用。
$env:FLASK_APP = "app"
$env:FLASK_ENV = "development"
答案 8 :(得分:1)
Flask 是 Web 应用程序框架。 Flask 是用 Python 语言编写的。通过使用这个框架,我们可以开发网站。它也被称为微框架。它没有用于数据库处理的内置抽象层。它支持将此类功能添加到应用程序的扩展。
Flask 框架使用路由技术来帮助用户记住应用程序 URL。通过使用路由器,我们可以直接访问所需的页面而无需导航。我们还可以通过添加一些可变部分来动态构建 Url。在 Web 应用程序中,我们为每个操作使用唯一的 Url。
当 run() 方法调用时,我们的 Flask 应用程序将启动。
if __name__=="__main__":
app.run()
如果我们编写 app.run() 并且我们的应用程序正在开发中,则应该为代码中的每个更改手动重新启动。因此,对于程序中的每个更改,我们都必须重新启动服务器并尝试观察更改。如果我们正在开发一个应用程序,那么我们必须检查我们在应用程序中所做的每个更改是否正确。因此,它将需要一次又一次地重新启动服务器。如果我们这样做,则需要很多时间。我们都知道时间在 IT 行业中非常重要,如果我们不能按时完成我们的项目,那么对开发人员和从事该项目的团队都不利。
要解决此问题,请启用调试支持。如果代码更改,服务器将自行重新加载。它还将提供一个有用的调试器。通过使用此调试器,它可以跟踪应用程序中的错误(如果有)。我们可以通过在运行之前将应用程序对象的 debug 属性设置为 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)
它也像上面写的代码一样工作,在这种情况下我们也不需要一次又一次地运行代码。
答案 9 :(得分:0)
如果您真的想打开调试器模式。
有一个快速的 hack 对我有用。
首先在 app.py
if __name__ == "__main__":
app.run(debug=True)
现在,不要使用flask run
,而是尝试python3 app.py runserver -d
python3 app.py runserver -d
这将强制以调试模式运行服务器。
答案 10 :(得分:0)
如果您像我一样使用 pycharm 并使用“运行”按钮,您只需修改 pycharm 本身内部的一些设置。 IDE 所做的是使用您的选项运行命令,只是很好地包装。
右上角 > 编辑配置... > 选中“FLASK_DEBUG”旁边的框。
此选项可启用 werkzeug 调试器,而无需更改代码(适用于需要部署的应用程序)。请参阅此处:https://flask.palletsprojects.com/en/master/debugging/
完美运行。
答案 11 :(得分:0)
通过虚拟环境激活
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)
答案 12 :(得分:0)
在虚拟环境中安装python-dotenv
。
在项目根目录中创建一个.flaskenv。项目根目录是指包含您的app.py文件的文件夹
在此文件中写入以下内容:
FLASK_APP=myapp
FLASK_ENV=development
现在发出以下命令:
flask run
答案 13 :(得分:0)
在开发环境中使用记录器和打印语句,如果在生产环境中可以使用哨兵。
答案 14 :(得分:0)
快速提示-如果您使用PyCharm,请转到virtualenv -p /usr/bin/python3.6 <foldername>
virtualenv -p /usr/bin/python3.4 <foldername>
=> class MyObject():
def __init__():
self.lastupdate = datetime.datetime.now()
def DoThings():
...
def MyThreadFunction(OneOfMyObject):
OneOfMyObject.DoThings()
OneOfMyObject.lastupdate = datetime.datetime.now()
# NOW, RETURN THE OBJECT
return oneOfMyObject
def main():
MyObject1 = MyObject()
MyObject2 = MyObject()
MyObjects = [MyObject1, MyObject2]
with Pool(2) as pool: # <- this is just a neater way of doing it than a while loop for various reasons. Checkout context managers if interested.
# Now we recover a list of the updated objects:
processed_object_list = pool.map(MyThreadFunction, MyObjects)
# Now inspect
for my_object in processed_object_list:
print(my_object.lastupdate)
if __name__ == '__main__':
main()
并启用Edit Configurations
复选框,然后重新启动Configurations
。
答案 15 :(得分:0)
如果您在本地运行它并希望能够单步执行代码:
python -m pdb script.py
答案 16 :(得分:-1)
要调试 Flask 应用程序,您需要使用:
server.run(
debug=True
)