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 unaValueError
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.