6.1 Lanzar excepciones intencionadamente
En Python puedes lanzar excepciones intencionadamente usando la palabra clave raise. Esto te permite señalar un error o una situación incorrecta en tu programa. Vamos a ver varias maneras de usar la palabra clave raise y cómo empacar excepciones.
Lanzar excepciones estándar
La sintaxis general de esta operación es:
raise excepción
Puedes lanzar excepciones estándar como Exception, TypeError y otras, pasándoles los mensajes adecuados.
Ejemplo: raise Exception
def check_number(value):
if value < 0:
raise Exception("Lo siento, no se permiten números por debajo de cero")
try:
check_number(-5)
except Exception as e:
print(f"Excepción capturada: {e}")
En este ejemplo, si el valor es menor que cero, se lanza Exception con el mensaje "Lo siento, no se permiten números por debajo de cero".
Ejemplo: raise TypeError
def check_integer(value):
if not isinstance(value, int):
raise TypeError("Solo se permiten enteros")
try:
check_integer("string")
except TypeError as e:
print(f"Excepción capturada: {e}")
En este ejemplo, si el valor no es un número entero, se lanza TypeError con el mensaje "Solo se permiten enteros".
6.2 Reempaquetar excepciones
A veces es necesario capturar una excepción y lanzar otra, proporcionando información más específica o útil. Esto se puede hacer usando la palabra clave raise ... from, que mantiene la excepción original como causa de la nueva.
La sintaxis general de esta operación es:
raise nueva_excepción from vieja_excepción
Ejemplo: Reempaquetar una excepción
class EmptyVariableError(Exception):
pass
def check_non_empty(value):
if value == "":
raise ValueError("La variable está vacía")
try:
check_non_empty("")
except ValueError as e:
raise EmptyVariableError("Variable vacía detectada") from e
En este ejemplo, si el valor de la variable está vacío, primero se lanza ValueError con el mensaje "La variable está vacía". Esta excepción se captura y se lanza una nueva excepción EmptyVariableError con el mensaje "Variable vacía detectada", manteniendo la excepción original usando from.
6.3 Analizar excepciones reempaquetadas
Usar la palabra clave raise ... from permite mantener la información sobre la cadena de excepciones, lo cual puede ser útil para la depuración. Puedes analizar excepciones reempaquetadas y sus causas.
Ejemplo de análisis de excepciones reempaquetadas:
class EmptyVariableError(Exception):
pass
def check_non_empty(value):
if value == "":
raise ValueError("La variable está vacía")
try:
check_non_empty("")
except ValueError as e:
raise EmptyVariableError("Variable vacía detectada") from e
Ejecutar el código anterior generará la siguiente salida:
Traceback (most recent call last): File "example.py", line 8, in
check_non_empty("") File "example.py", line 5, in check_non_empty raise ValueError("La variable está vacía") ValueError: La variable está vacía
The above exception was the direct cause of the following exception:
Traceback (most recent call last): File "example.py", line 10, in
raise EmptyVariableError("Variable vacía detectada") from e EmptyVariableError: Variable vacía detectada
El primer error (marcado en verde) es el error original que ocurrió en algún lugar profundo del código. A veces, estos errores ocurren de vez en cuando, y este es un comportamiento normal del programa.
El segundo error (marcado en azul) es un error de nivel más alto. Tu programa o framework debería saber cómo manejarlo. Sin embargo, si quieres profundizar y conocer las causas del error, el error verde te será útil.
Todo está hecho de manera muy razonable.
GO TO FULL VERSION