registrando excepciones no capturas en python: desatar potencial de registro más allá de stderr
manejo de excepciones no capturas de manera conveniente e informativa es crucial para la depuración y mantener aplicaciones estables. Si bien es prudente atrapar y manejar excepciones explícitamente, hay escenarios en los que automatizar este proceso puede ser muy beneficioso. Este artículo explora un enfoque innovador para registrar las excepciones no capturas a través del módulo de registro versátil.
en lugar de confiar en el comportamiento predeterminado que imprime excepciones a STDERR, es posible configurar el módulo de registro para interceptar las excepciones no capturadas y registrarlas en el nivel deseado, como errores o críticos. Esto permite a los desarrolladores centralizar el manejo de excepciones, eliminar los mensajes stderr ruidosos y proporcionar más contexto para la depuración.
para implementar este manejo de excepciones basado en registro, se pueden tomar los siguientes pasos:
- crea una función de controlador de excepción personalizada que maneja las excepciones de las costumbres por invocación. Función a la variable global sys.excepthook, que es responsable de manejar excepciones no capturas en el intérprete de python.
-
Este enfoque proporciona varias ventajas:
de registro de excepción centralizada: - todas las excepciones que no se han registrado están registradas de manera consistente, proporcionando una sola fuente de información para la información centralizada para la registro de excepción centralizada para la sesión centralizada: Análisis.
Información de excepción detallada: - la función logging.exception (e) registra automáticamente el tipo de excepción, el mensaje y la información de rastreo de pila, proporcionando un contexto valioso para la depuración. Excepciones de filtración como se desea.
Código de ejemplo: - Importar SYS
Registro de importación
logger = logging.getLogger (__ name__)
handler = logging.streamhandler (stream = sys.stdout)
logger.addhandler (manejador)
Def Handle_Exception (exc_type, exc_value, exc_traceback):
Si isSubclass (exc_type, keyboardinterrupts):
Sys .__ Excepthook __ (exc_type, exc_value, exc_traceback)
devolver
logger.error ("Excepción no captura", exc_info = (exc_type, exc_value, exc_traceback)))
sys.excepthook = handle_exception
# Uso de ejemplo
Si __name__ == "__main__":
Levante RuntimeError ("Test Unhandled")
En este ejemplo, el tiempo de ejecución no capturado se registra como un mensaje de error en la transmisión STDout, lo que permite una fácil depuración y análisis. Este enfoque se puede extender aún más agregando diferentes manejadores al objeto Logger para redirigir el registro de excepciones a varios destinos, como archivos o bases de datos. Al utilizar efectivamente el registro para el manejo de excepciones no capturas, los desarrolladores pueden mejorar significativamente las capacidades de depuración y agilizar el mantenimiento de la aplicación.