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.

The debugger is enabled by default when the development server is run in debug mode.

$ flask --app hello run --debug

When running from Python code, passing debug=True enables debug mode, which is mostly equivalent.

app.run(debug=True)

Servidor de desarrollo and Interfaz de línea de comandos have more information about running the debugger and debug mode. More information about the debugger can be found in the Werkzeug documentation.

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.

When using an external debugger, the app should still be in debug mode, otherwise Flask turns unhandled errors into generic 500 error pages. However, the built-in debugger and reloader should be disabled so they don’t interfere with the external debugger.

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

Cuando se ejecuta desde Python:

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

Disabling these isn’t required, an external debugger will continue to work with the following caveats.

  • If the built-in debugger is not disabled, it will catch unhandled exceptions before the external debugger can.

  • If the reloader is not disabled, it could cause an unexpected reload if code changes during a breakpoint.

  • The development server will still catch unhandled exceptions if the built-in debugger is disabled, otherwise it would crash on any error. If you want that (and usually you don’t) pass passthrough_errors=True to app.run.

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