Cómo depurar una aplicación Flask

Resuelto Kimmy asked hace 11 años • 0 respuestas

¿Cómo se supone que se deben depurar errores en Flask? ¿Imprimir en la consola? ¿Mensajes flash a la página? ¿O hay una opción más poderosa disponible para descubrir qué sucede cuando algo sale mal?

Kimmy avatar Jun 26 '13 07:06 Kimmy
Aceptado

Al ejecutar la aplicación en modo de depuración se mostrará un rastreo interactivo y una consola en el navegador cuando haya un error. A partir de Flask 2.2, para ejecutar en modo de depuración, pase las opciones --appy --debugal flaskcomando.

$ flask --app example --debug run

Antes de Flask 2.2, esto estaba controlado por la FLASK_ENV=developmentvariable de entorno. Aún puedes usar FLASK_APPy FLASK_DEBUG=1en lugar de las opciones anteriores.

Para Linux, Mac, subsistema Linux para Windows, Git Bash en Windows, etc.:

$ export FLASK_APP=example
$ export FLASK_DEBUG=1
$ flask run

Para Windows CMD, use seten lugar de exportar:

set FLASK_DEBUG=1

Para PowerShell, utilice $env:

$env:FLASK_DEBUG = "1"

Si está utilizando el app.run()método en lugar del flask runcomando, pase debug=Truepara habilitar el modo de depuración.

Los rastreos también se imprimen en el terminal que ejecuta el servidor, independientemente del modo de desarrollo.

Si está utilizando PyCharm, VS Code, etc., puede aprovechar su depurador para recorrer el código con puntos de interrupción. La configuración de ejecución puede apuntar a una secuencia de comandos que llama a app.run(debug=True, use_reloader=False), o apuntar a la venv/bin/flasksecuencia de comandos y utilizarla como lo haría desde la línea de comandos. Puede dejar el recargador deshabilitado, pero una recarga eliminará el contexto de depuración y tendrá que capturar un punto de interrupción nuevamente.

También puede usar pdb, pudb u otro depurador de terminal llamando set_tracea la vista donde desea comenzar a depurar.


Asegúrese de no utilizar bloques demasiado anchos, excepto. Rodear todo su código con un comodín try... except...silenciará el error que desea depurar. En general, es innecesario, ya que Flask ya manejará excepciones mostrando el depurador o un error 500 e imprimiendo el rastreo en la consola.

davidism avatar Jun 26 '2013 14:06 davidism

Puede usarlo app.run(debug=True)para la edición del Werkzeug Debugger como se menciona a continuación, y debería haberlo sabido.

bnlucas avatar Jun 26 '2013 00:06 bnlucas

Desde la 1.1.xdocumentación , puede habilitar el modo de depuración exportando una variable de entorno a su indicador de shell:

export FLASK_APP=/daemon/api/views.py  # path to app
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0
Édouard Lopez avatar Aug 04 '2016 21:08 Édouard Lopez

También se puede utilizar la extensión Flask Debug Toolbar para obtener información más detallada incrustada en las páginas renderizadas.

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>"

Inicie la aplicación de la siguiente manera:

FLASK_APP=main.py FLASK_DEBUG=1 flask run
turdus-merula avatar Jan 17 '2017 20:01 turdus-merula

Si está utilizando Visual Studio Code, reemplace

app.run(debug=True)

con

app.run()

Aparece cuando al activar el depurador interno se desactiva el depurador de VS Code.

Eman4real avatar May 03 '2018 03:05 Eman4real