Skip to content

Excepciones#

Las excepciones en Python son una forma de manejar errores que pueden ocurrir durante la ejecuci贸n de un programa. Cuando ocurre un error, Python genera una excepci贸n que puede ser capturada y manejada para evitar que el programa se detenga abruptamente.

Ejemplo b谩sico:

try:
    # C贸digo que puede causar una excepci贸n
    resultado = 10 / 0
except ZeroDivisionError:
    # C贸digo que se ejecuta si ocurre una excepci贸n de tipo ZeroDivisionError
    print("No se puede dividir por cero.")
else:
    # C贸digo que se ejecuta si no ocurre ninguna excepci贸n
    print("El resultado es:", resultado)
finally:
    # C贸digo que se ejecuta siempre, ocurra o no una excepci贸n
    print("Fin del bloque try-except.")

En este ejemplo:

  1. try: Contiene el c贸digo que puede causar una excepci贸n.
  2. except: Captura y maneja la excepci贸n espec铆fica (en este caso, ZeroDivisionError).
  3. else: Se ejecuta si no ocurre ninguna excepci贸n.
  4. finally: Se ejecuta siempre, independientemente de si ocurri贸 una excepci贸n o no.

Manejo de m煤ltiples excepciones#

try:
    # Intentar acceder a un 铆ndice fuera del rango
    lista = [1, 2, 3]
    elemento = lista[5]
except IndexError as e:
    print("Error: 脥ndice fuera del rango.")  
    # Salida: Error: 脥ndice fuera del rango.
    print("Detalles del error:", e)  
    # Salida: list index out of range
except Exception as e:
    print("Error gen茅rico:", e)

Uso de else y finally en el manejo de excepciones#

try:
    # Intentar convertir una cadena a entero
    numero = int("123")
except ValueError as e:
    print("Error: No se puede convertir la cadena a entero.")
else:
    print("Conversi贸n exitosa:", numero)  
    # Salida: Conversi贸n exitosa: 123
finally:
    print("Bloque finally ejecutado.")  
    # Salida: Bloque finally ejecutado.

Manejar varios tipos de errores en la misma excepci贸n#

try:
    # C贸digo que puede causar m煤ltiples excepciones
    numero = int(input("Introduce un n煤mero: "))
    resultado = 10 / numero
except (ValueError, ZeroDivisionError) as e:
    # Maneja tanto ValueError como ZeroDivisionError
    print(f"Ocurri贸 un error: {e}")
else:
    print(f"El resultado es: {resultado}")
finally:
    print("Fin del bloque try-except.")

Lanzar una excepci贸n personalizada#

try:
    # Definir una funci贸n que lanza una excepci贸n personalizada
    def verificar_edad(edad):
        if edad < 18:
            raise ValueError("La edad debe ser mayor o igual a 18.")
        return True

    # Llamar a la funci贸n con una edad inv谩lida
    verificar_edad(16)
except ValueError as e:
    print("Error personalizado:", e)  
    # Salida: Error personalizado: La edad debe ser mayor o igual a 18.

Manejo de excepciones anidadas#

try:
    try:
        # Intentar abrir un archivo que no existe
        with open("archivo_inexistente.txt", "r") as archivo:
            contenido = archivo.read()
    except FileNotFoundError as e:
        print("Error: Archivo no encontrado.")  
        # Salida: Error: Archivo no encontrado.
        print("Detalles del error:", e)  
        # Salida: [Errno 2] No such file or directory: 'archivo_inexistente.txt'
        raise  # Re-lanzar la excepci贸n
except Exception as e:
    print("Excepci贸n capturada en el bloque externo:", e)

Uso de assert para lanzar una excepci贸n#

try:
    # Verificar una condici贸n con assert
    x = 10
    assert x > 20, "x debe ser mayor que 20"
except AssertionError as e:
    print("Error de aserci贸n:", e)  
    # Salida: Error de aserci贸n: x debe ser mayor que 20