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?
- El código dentro de
tryse ejecuta primero. - Si no hay ninguna excepción (error), se ignora el bloque
excepty el programa continúa. - Si ocurre una excepción en el
try, el resto del bloquetryse salta, y si el tipo de error coincide con lo indicado después deexcept, se ejecuta el código del bloqueexcept.
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 bloquetryfue 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...")