python-excepciones-personalizadas

Creando Excepciones personalizadas en Python

En Python, además de manejar las excepciones integradas, también podemos definir nuestras propias excepciones personalizadas.

Esto es útil porque podemos representar errores específicos a la lógica de tu aplicación, lo que nos permite gestionar estos errores con mayor precisión.

Para crear una excepción personalizada, esta debe heredar de la clase base Exception (o alguna de de sus subclases).

Definición de excepciones personalizadas

Para crear una excepción personalizada, simplemente definimos una nueva clase que hereda de Exception.

class MiExcepcionPersonalizada(Exception):
    def __init__(self, mensaje):
        super().__init__(mensaje)

Es común agregar un constructor que acepte un mensaje de error y otros posibles parámetros relevantes. También podemos añadir cualquier número de parámetros adicionales que necesitemos,

class ErrorDeValidacion(Exception):
    def __init__(self, campo, mensaje):
        self.campo = campo
        self.mensaje = mensaje
        super().__init__(f"Error en '{campo}': {mensaje}")

# Lanzar la excepción
raise ErrorDeValidacion("nombre", "El nombre no puede estar vacío.")

De igual forma, podemos tener nuestra propia jerarquía de errores, que incluya herencia entre ellos

class ErrorDeConexion(Exception):
    def __init__(self, mensaje):
        super().__init__(mensaje)

class ErrorDeTiempoDeEspera(ErrorDeConexion):
    def __init__(self, tiempo):
        self.tiempo = tiempo
        super().__init__(f"Tiempo de espera excedido: {tiempo} segundos")

Usando excepciones personalizadas

Una vez definidas las excepciones personalizadas, se pueden utilizar en bloques try y except de la misma manera que las excepciones integradas.

try:
    raise MiExcepcionPersonalizada("Este es un error personalizado.")
except MiExcepcionPersonalizada as e:
    print(f"Se capturó mi excepción personalizada: {e}")

Además, como vimos al hablar del bloque try-except, podemos capturar varias de ellas

try:
    # Código que puede lanzar una excepción
    resultado = 10 / 0
except MiExcepcionPersonalizada:
    print(f"Se capturó mi excepción personalizada: {e}")
except OtraExcepcionPersonalizada:
    print(f"Se capturó otra excepción personalizada: {e}")
except Exception:
    print("Excepcion desconocida")