El manejo de excepciones es un mecanismo fundamental en Python para gestionar situaciones inesperadas durante la ejecución de un programa, evitando que la aplicación finalice de forma abrupta. A continuación, se detallan las dos estructuras principales para capturar y procesar errores de manera profesional.
1. Captura de múltiples tipos de excepción específicos
Esta estructura se utiliza cuando conocemos los errores potenciales que un bloque de código puede generar y queremos darles un tratamiento controlado. Es posible agrupar varios tipos de excepciones en una tupla.
try:
# Código propenso a errores
resultado = 10 / int(input("Introduce un divisor: "))
except (ZeroDivisionError, ValueError) as error:
# Bloque de tratamiento para las excepciones especificadas
print(f"Se ha detectado un error específico: {error}")
2. Captura genérica mediante la clase Exception
Cuando no se puede predecir con exactitud el tipo de fallo o se desea una red de seguridad global, se utiliza la clase base Exception. Esta capturará casi cualquier error que ocurra dentro del bloque try.
try:
# Operación de riesgo
archivo = open("configuracion.log", "r")
contenido = archivo.read()
except Exception as e:
# Captura cualquier excepción que herede de la clase Exception
print(f"Ha ocurrido un error inesperado: {type(e).__name__} - {e}")
Ejemplo práctico de implmeentación
En el siguiente fragmento de código, se observa cómo fluye la ejecución cuando se implementan estos bloques protectores en diferentes escenarios de error.
def procesar_datos(lista, indice):
print("--- Inicio de la operación ---")
try:
# Intento de acceso y división
valor = lista[indice]
calculo = 100 / valor
print(f"Resultado del cálculo: {calculo}")
except (IndexError, ZeroDivisionError) as err:
print(f"Error de validación de datos: {err}")
except Exception as general:
print(f"Error imprevisto: {general}")
print("--- Operación finalizada con éxito controlado ---")
# Caso 1: Error de división por cero
procesar_datos([10, 0, 5], 1)
# Caso 2: Error de índice fuera de rango
procesar_datos([1, 2, 3], 10)
En el primer caso, el intérprete detecta la división por cero y salta inmediatamente al bloque except correspondiente. En el segundo caso, al intentar acceder a un índice que no existe en la lista, se captura la excepción IndexError. En ambos escenarios, el programa continúa su ejecución normal después del bloque try-except.