Cómo depurar una aplicación Flask
¿Cómo se supone que se depuran los errores en Flask? ¿Imprimir en la consola? ¿Mensajes en la página? ¿O hay alguna opción más potente para averiguar lo que ocurre cuando algo va mal?
95
3
Ejecutar la aplicación en modo de desarrollo mostrará un rastreo interactivo y una consola en el navegador cuando haya un error. Para ejecutar en modo de desarrollo, establece la variable de entorno
FLASK_ENV=development
y luego utiliza el comandoflask run
(recuerda apuntarFLASK_APP
a tu aplicación también).Para Linux, Mac, Subsistema Linux para Windows, Git Bash en Windows, etc:
Para el CMD de Windows, utilice
set
en lugar de exportar:Para PowerShell, utilice
$env
:Antes de Flask 1.0, esto era controlado por la variable de entorno
FLASK_DEBUG=1
.Si utiliza el método
app.run()
en lugar del comandoflask run
, pasedebug=True
para activar el modo de depuración.Las trazas también se imprimen en el terminal que ejecuta el servidor, independientemente del modo de desarrollo.
Si usas PyCharm, VS Code, etc., puedes aprovechar su depurador para recorrer el código con puntos de interrupción. La configuración de ejecución puede apuntar a un script llamando a
app.run(debug=True, use_reloader=False)
, o apuntar al scriptvenv/bin/flask
y usarlo como lo harías desde la línea de comandos. Puedes dejar el recargador desactivado, pero una recarga matará el contexto de depuración y tendrás que volver a coger un punto de interrupción.También puedes usar pdb, pudb, u otro depurador de terminal llamando a
set_trace
en la vista donde quieres empezar a depurar.Asegúrese de no utilizar bloques de excepción demasiado amplios. Rodeando todo su código con un bloque "try... except..." silenciará el error que desea depurar. Es innecesario en general, ya que Flask ya manejará las excepciones mostrando el depurador o un error 500 e imprimiendo la traza en la consola.
Puedes usar
app.run(debug=True)
para el Werkzeug Debugger edit como se menciona a continuación, y debería haberlo sabido.Desde la documentación de
0.11
, puedes habilitar el modo de depuración exportando una variable de entorno: