python-lanzar-excepciones-raise

Lanzar Excepciones con `raise` en Python

La palabra clave raise se utiliza para lanzar (o propagar) una excepción en Python. Al usar raise, podemos generar errores personalizados o volver a lanzar excepciones capturadas para que sean manejadas en un nivel superior del programa.

La instrucción raise en Python se utiliza para lanzar una excepción intencionalmente. Esto puede ser útil en varias situaciones, como:

  • Indicar errores en el flujo de programa: Cuando se detecta una condición que no puede ser manejada adecuadamente en el contexto actual.
  • Forzar el manejo de errores: Asegurar que los errores sean tratados adecuadamente en la capa superior de la aplicación.

Sintaxis básica

La sintaxis básica para lanzar una excepción con raise es la siguiente:

raise ExceptionType("Mensaje de error")
  • ExceptionType es la clase de excepción que deseas lanzar
  • Mensaje de error es una cadena opcional que proporciona detalles sobre el error

Ejemplo de uso básico

Supongamos que queremos lanzar una excepción cuando un valor no es válido:

def verificar_edad(edad):
    if edad < 0:
        raise ValueError("La edad no puede ser negativa.")
    print("Edad válida.")

try:
    verificar_edad(-5)
except ValueError as e:
    print(f"Se produjo un error: {e}")

En este ejemplo,

  • La función verificar_edad lanza una ValueError si la edad es negativa
  • El bloque try-except captura esta excepción y muestra el mensaje de error

Volver a lanzar excepciones

A veces, después de capturar una excepción, podemos querer volver a lanzarla para que pueda ser manejada en un contexto superior.

Esto es útil si has realizado algún tipo de procesamiento en el bloque except pero deseas que la excepción siga propagándose.

def procesar_datos(dato):
    try:
        if not isinstance(dato, int):
            raise TypeError("Se esperaba un entero.")
        print(f"Procesando {dato}")
    except TypeError as e:
        print(f"Error detectado: {e}")
        raise  # Vuelve a lanzar la excepción para que pueda ser manejada más arriba

try:
    procesar_datos("texto")
except TypeError as e:
    print(f"Excepción manejada en el nivel superior: {e}")

En este caso, la excepción TypeError es capturada y manejada parcialmente en la función procesar_datos, pero luego se vuelve a lanzar para que pueda ser gestionada por el bloque except en el nivel superior.