Cómo depurar una aplicación Flask


134

¿Cómo se debe depurar los 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?


55
No hay nada mágico app.run()(ya sea con la depuración activada o desactivada). Flask se comporta como cualquier otra aplicación de Python, por lo que puede depurarlo de la misma manera que depura cualquier aplicación de Python. Si desea usar el registro, use el registro. Si desea imprimir, use impresiones. Incluso puede usar un depurador si lo desea.
Mark Hildreth

Respuestas:


128

La ejecución de 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, configure la FLASK_ENV=developmentvariable de entorno y luego use el flask runcomando (recuerde señalarFLASK_APP a su aplicación).

Para Linux, Mac, Subsistema de Linux para Windows, Git Bash en Windows, etc.

export FLASK_APP=myapp
export FLASK_ENV=development
flask run

Para Windows CMD, use en setlugar de exportar:

set FLASK_ENV=development

Para PowerShell, use $env:

$env:FLASK_ENV = "development"

Antes de Flask 1.0, esto estaba controlado por la FLASK_DEBUG=1variable de entorno en su lugar.

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

Las trazas 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 app.run(debug=True, use_reloader=False), o apuntarla a la venv/bin/flasksecuencia de comandos y usarla como lo haría desde la línea de comandos. Puede dejar el recargador deshabilitado, pero una recarga matará el contexto de depuración y deberá volver a tomar un punto de interrupción.

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


Asegúrese de no usar demasiado ancho, excepto los bloques. 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á las excepciones mostrando el depurador o un error 500 e imprimiendo el rastreo en la consola.


38

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


77
En realidad, cuando corres debug=True, en realidad estás usando el depurador Werkzeug, por lo que no es uno u otro;
Sean Seanira

Ja, tienes razón. Supongo que debería haber mirado el archivo setup.py de Flask para conocer los requisitos. Utilizo una copia modificada para trabajar en GAE donde debe inicializar Werkzeug manualmente.
bnlucas

He configurado app.run (debug = True), si imprimo xyz donde imprime, gracias
Kimmy

El uso print 'xyz'se imprimirá en la consola. Si desea depurar en el navegador, deberá forzar un error en el lugar donde desea depurar. raise Exception('xyz'). Esto activará la depuración a la salida en la ventana del navegador.
bnlucas

25

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

44
Esta respuesta sería más útil si explicara qué es realmente el modo de depuración. ¿Hace más que permitir la depuración en el navegador? Desafortunadamente, dado que estoy trabajando en una API REST, eso realmente no me ayuda mucho.
Michael Scheper el

¿Dónde pongo ese fragmento?
mLstudent33

1
@ mLstudent33 en una concha
Édouard Lopez

16

También se puede usar la barra de herramientas de depuración de frascos extensión para obtener información más detallada incrustada en 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

12

Si está utilizando Visual Studio Code, reemplace

app.run(debug=True)

con

app.run()

Aparece cuando se enciende el depurador interno deshabilita el depurador de VS Code.


3
¿Puedes compartir un ejemplo de una configuración de trabajo? Ya tengo FLASK_APP definido en mi env y la configuración predeterminada no funcionaría. Probé este: pastebin.com/v8hBQ2vv y varias permutaciones similares, pero fue en vano.
Brandon Dube

12

Si desea depurar su aplicación de matraz, simplemente vaya a la carpeta donde está la aplicación de matraz. No olvides activar tu entorno virtual y pegar las líneas en la consola, cambiar "mainfilename" al archivo principal del frasco.

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

Después de habilitar su depurador para la aplicación de matraz, casi todos los errores se imprimirán en la consola o en la ventana del navegador. Si desea averiguar qué está sucediendo, puede usar declaraciones de impresión simples o también puede usar console.log () para el código javascript.


6

Instalar python-dotenven su entorno virtual.

Cree un .flaskenv en la raíz de su proyecto. Por raíz del proyecto, me refiero a la carpeta que tiene su archivo app.py

Dentro de este archivo escriba lo siguiente:

FLASK_APP=myapp 
FLASK_ENV=development

Ahora emita el siguiente comando:

flask run

No me funciona ... sigue mostrando el modo de depuración: apagado
Federico Gentile

3

Para activar el modo de depuración en el matraz, simplemente escriba set FLASK_DEBUG=1en su CMDpara Windows y exporte FLASK_DEBUG=1en el terminal de Linux, luego reinicie su aplicación y ¡listo!


2

Consejo rápido: si utiliza un PyCharm, vaya a Edit Configurations=> Configurationsy active la FLASK_DEBUGcasilla de verificación, reinicie el Run.


2
Es posible que desee agregar que esta casilla de verificación solo está disponible en PyCharm Professional. Referencia: jetbrains.com/help/pycharm/…
cyroxx

1

Utilice los registradores y las declaraciones impresas en el Entorno de desarrollo, puede ir a centinela en caso de entornos de producción.


1

Para usuarios de Windows:

Abra Powershell y cd en el directorio de su proyecto.

Use estos comandos en Powershell, todas las demás cosas no funcionarán en Powershell.

$env:FLASK_APP = "app"  
$env:FLASK_ENV = "development"

-1

Si lo está ejecutando localmente y desea poder recorrer el código:

python -m pdb script.py


Esto no se aplica a las aplicaciones de matraz en absoluto
CornSmith
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.