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")