Depuración de errores de la aplicación

En producción

No ejecute el servidor de desarrollo, ni habilite el depurador incorporado, en un entorno de producción. El depurador permite ejecutar código Python arbitrario desde el navegador. Está protegido por un pin, pero no se debe confiar en eso para la seguridad.

Utiliza una herramienta de registro de errores, como Sentry, como se describe en Herramientas de registro de errores, o activa el registro y las notificaciones como se describe en Registro.

Si tiene acceso al servidor, podría añadir algún código para iniciar un depurador externo si request.remote_addr coincide con su IP. Algunos depuradores IDE también tienen un modo remoto para que los puntos de interrupción en el servidor puedan ser interactuados localmente. Habilite un depurador sólo temporalmente.

El depurador incorporado

El servidor de desarrollo incorporado de Werkzeug proporciona un depurador que muestra un rastreo interactivo en el navegador cuando se produce un error no manejado durante una solicitud. Este depurador sólo debe utilizarse durante el desarrollo.

captura de pantalla del depurador en acción

Advertencia

El depurador permite ejecutar código Python arbitrario desde el navegador. Está protegido por un pin, pero sigue representando un riesgo de seguridad importante. No ejecute el servidor de desarrollo o el depurador en un entorno de producción.

El depurador se activa por defecto cuando el servidor de desarrollo se ejecuta en modo depuración.

$ flask --app hello run --debug

Cuando se ejecuta desde código Python, pasar debug=True habilita el modo depuración, que es mayormente equivalente.

app.run(debug=True)

Servidor de desarrollo y Interfaz de línea de comandos tienen más información sobre la ejecución del depurador y el modo depuración. Puede encontrar más información sobre el depurador en la documentación de Werkzeug.

Depuradores externos

Los depuradores externos, como los proporcionados por los IDEs, pueden ofrecer una experiencia de depuración más potente que el depurador incorporado. También pueden utilizarse para recorrer el código durante una solicitud antes de que se produzca un error, o si no se produce ningún error. Algunos incluso tienen un modo remoto para que puedas depurar el código que se ejecuta en otra máquina.

Cuando se utiliza un depurador externo, la aplicación todavía debe estar en modo de depuración, de lo contrario Flask convierte los errores no manejados en páginas genéricas de error 500. Sin embargo, el depurador integrado y el reloader deben estar desactivados para que no interfieran con el depurador externo.

$ flask --app hello run --debug --no-debugger --no-reload

Cuando se ejecuta desde Python:

app.run(debug=True, use_debugger=False, use_reloader=False)

Deshabilitar estos no es necesario, un depurador externo seguirá funcionando con las siguientes advertencias.

  • Si el depurador incorporado no está deshabilitado, capturará las excepciones no manejadas antes de que lo haga el depurador externo.

  • Si el reloader no está desactivado, podría provocar una recarga inesperada si el código cambia durante un punto de interrupción.

  • El servidor de desarrollo seguirá capturando las excepciones no manejadas si el depurador incorporado está deshabilitado, de lo contrario se bloquearía con cualquier error. Si desea que (y por lo general no lo hace) pase passthrough_errors=True a app.run.

    app.run(
        debug=True, passthrough_errors=True,
        use_debugger=False, use_reloader=False
    )