CodeGym /Cursos /Python SELF ES /Lanzar una excepción

Lanzar una excepción

Python SELF ES
Nivel 18 , Lección 0
Disponible

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.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION