Saltar al contenido principal

Manejo de Excepciones

En programación, los errores son inevitables. Un usuario puede ingresar texto donde se espera un número, un archivo puede no existir, o la conexión a internet puede fallar. Si no "manejamos" estos errores, nuestro programa "crasheará" y se detendrá bruscamente.

En Python, el manejo de errores se realiza utilizando bloques try, except, else y finally.

El Bloque try...except

¿Cómo funciona?

  1. El código dentro de try se ejecuta primero.
  2. Si no hay ninguna excepción (error), se ignora el bloque except y el programa continúa.
  3. Si ocurre una excepción en el try, el resto del bloque try se salta, y si el tipo de error coincide con lo indicado después de except, se ejecuta el código del bloque except.

Ejemplo Práctico: División por Cero

try:
print("Iniciando cálculo...")
resultado = 10 / 0 # Esto causa un ZeroDivisionError
print("El resultado es:", resultado)
except ZeroDivisionError:
print("¡Error! No puedes dividir por cero.")

print("El programa sigue funcionando normalmente.")

Manejando Múltiples Excepciones

Puedes tener múltiples bloques except para preparar respuestas diferentes según el error que ocurra, o incluso un bloque genérico que ataje todo.

try:
numero = int(input("Ingresa un número entero: "))
# Si el usuario ingresa letras, causa ValueError
# Si ingresa un número, intentamos dividir
resultado = 100 / numero
except ValueError:
print("Eso no es un número entero válido.")
except ZeroDivisionError:
print("Ingresaste un cero, y la división por cero no es posible.")
except Exception as e:
# Atrapa CUALQUIER otro tipo de error no especificado arriba
print(f"Ha ocurrido un error inesperado: {e}")

Añadiendo else y finally

  • else: Se ejecuta solo si el bloque try fue exitoso y NO levantó ninguna excepción. Es útil para código que solo debe correr si todo salió bien.
  • finally: Se ejecuta siempre, sin importar si hubo un error o no. El típico caso de uso es para "limpiar" recursos, como cerrar herramientas o archivos abiertos.
try:
archivo = open("datos.txt", "r")
# Intentar leer datos
except FileNotFoundError:
print("El archivo no se encontró.")
else:
print("Archivo leído con éxito.")
finally:
# Asegurarnos de que el archivo no quede abierto en memoria, pase lo que pase
print("Cerrando recursos...")