¿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?
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.
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
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.
¿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.
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!
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.Respuestas:
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=development
variable de entorno y luego use elflask run
comando (recuerde señalarFLASK_APP
a su aplicación).Para Linux, Mac, Subsistema de Linux para Windows, Git Bash en Windows, etc.
Para Windows CMD, use en
set
lugar de exportar:Para PowerShell, use
$env
:Antes de Flask 1.0, esto estaba controlado por la
FLASK_DEBUG=1
variable de entorno en su lugar.Si está utilizando el
app.run()
método en lugar delflask run
comando, pasedebug=True
para 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 lavenv/bin/flask
secuencia 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_trace
a 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.fuente
Puede usarlo
app.run(debug=True)
para la edición de Werkzeug Debugger como se menciona a continuación, y debería haberlo sabido.fuente
debug=True
, en realidad estás usando el depurador Werkzeug, por lo que no es uno u otro;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.Desde la
1.1.x
documentación , puede habilitar el modo de depuración exportando una variable de entorno a su indicador de shell:fuente
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.
Inicie la aplicación de la siguiente manera:
fuente
Si está utilizando Visual Studio Code, reemplace
con
Aparece cuando se enciende el depurador interno deshabilita el depurador de VS Code.
fuente
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.
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.
fuente
Instalar
python-dotenv
en 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:
Ahora emita el siguiente comando:
fuente
Para activar el modo de depuración en el matraz, simplemente escriba set
FLASK_DEBUG=1
en suCMD
para Windows y exporteFLASK_DEBUG=1
en el terminal de Linux, luego reinicie su aplicación y ¡listo!fuente
Consejo rápido: si utiliza un PyCharm, vaya a
Edit Configurations
=>Configurations
y active laFLASK_DEBUG
casilla de verificación, reinicie elRun
.fuente
Utilice los registradores y las declaraciones impresas en el Entorno de desarrollo, puede ir a centinela en caso de entornos de producción.
fuente
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.
fuente
Si lo está ejecutando localmente y desea poder recorrer el código:
python -m pdb script.py
fuente