"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo implementar el manejo de excepciones personalizadas con el módulo de registro de Python?

¿Cómo implementar el manejo de excepciones personalizadas con el módulo de registro de Python?

Publicado el 2025-02-04
Navegar:825

How to Implement Custom Exception Handling with Python\'s Logging Module?

que el manejo de errores personalizados con el módulo de registro de Python

asegurando que las excepciones no capturadas se manejen y registren correctamente Una aplicación de Python. Si bien atrapar y registrar las excepciones manualmente es un enfoque viable, puede ser tedioso y propenso a errores.

para abordar este problema, Python le permite anular el mecanismo de manejo de excepción predeterminado y redirigir las excepciones no capturas al módulo de registro. Esto proporciona una forma conveniente y sistemática de capturar y registrar información de excepción detallada.

solución

El problema presentado puede resolverse modificando la función global sys.excepthook. Al definir un controlador de excepciones personalizado, puede interceptar todas las excepciones no capturas y manejarlas según lo desee. Aquí hay un ejemplo completo y robusto:

import sys
import logging

logger = logging.getLogger(__name__)
handler = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(handler)

def handle_exception(exc_type, exc_value, exc_traceback):
    # Ignore KeyboardInterrupt so the application can exit with Ctrl   C
    if issubclass(exc_type, KeyboardInterrupt):
        sys.__excepthook__(exc_type, exc_value, exc_traceback)
        return

    # Log the uncaught exception
    logger.error("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback))

sys.excepthook = handle_exception

# Example code to test the custom exception handling
if __name__ == "__main__":
    raise RuntimeError("Test unhandled")

explicación

este código:

  • define un manejador de excepción personalizado, handle_exception, que se invoca Cuando ocurre una excepción no captura.
  • Ignores keyboardinterrupt (ctrl c) para permitir que la aplicación salga con gracia.
  • registra la excepción no captura utilizando el método de error () del módulo de registro.
  • Adjunta el controlador de excepción personalizado a la función sys.excepthook.
  • plantea un error de tiempo de ejecución para demostrar el manejo de errores personalizados.

Cuando se plantea una excepción no captura, el controlador de excepción personalizado interviene y registra los detalles de la excepción al controlador configurado. En este caso, el controlador de transmisión predeterminado se usa para emitir la información de excepción a stdout.

características adicionales

El ejemplo también incluye algunas características opcionales:

  • Filtring: ignore ciertos tipos de excepciones (E.G., keyboardInterrupt) usando la verificación de subclase. controladores para controlar el formato de salida y el destino de los registros de excepción.
Declaración de liberación Este artículo se reproduce en: 1729608201 Si hay violaciones, comuníquese con [email protected] para eliminar
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3