9. Gestión de Errores y Programación Funcional
🛡️ Excepciones: El escudo de tus scripts
Una excepción es un error que ocurre durante la ejecución (como intentar dividir por cero o conectar a una IP que no existe). En lugar de que el programa "explote", usamos bloques para controlarlo:
try: Aquí pones el código "peligroso" (el que podría fallar).except: Aquí defines qué hacer si ocurre el error (ej: mostrar un aviso en rojo).else: (Opcional) Se ejecuta solo si no hubo errores en eltry.finally: Se ejecuta siempre, haya error o no. Ideal para cerrar conexiones o liberar memoria.
⚠️ Personalización de Errores
Podemos crear nuestras propias reglas. Si un técnico introduce una IP fuera de rango, podemos lanzar un error específico usando raise.
Ejemplo: Crear
ErrorDeRedpara cuando un servidor no responde tras 3 intentos.
⚡ Programación Funcional: Código "limpio"
Es un estilo de programación que permite procesar grandes listas de datos en una sola línea. Muy útil para filtrar logs o transformar listas de usuarios:
Funciones
lambda: Funciones anónimas de una sola línea.lambda x: x * 2.map(): Aplica una función a todos los elementos de una lista. (Ej: Convertir todas las IPs de una lista a minúsculas).filter(): Crea una nueva lista solo con los elementos que cumplen una condición. (Ej: Filtrar solo los usuarios que son "admin").reduce(): Reduce una lista a un solo valor (necesitafunctools). (Ej: Sumar todo el espacio ocupado por varios discos).
💡 Ejemplo práctico: Validando un Puerto de Red
def comprobar_puerto(p):
if p < 1 or p > 65535:
raise ValueError("Puerto fuera de rango legal") # Error personalizado
try:
puerto = int(input("Introduce puerto: "))
comprobar_puerto(puerto)
except ValueError as e:
print(f"Error detectado: {e}")
finally:
print("Limpiando recursos de red...")
🛠️ Actividad práctica
El script "Inmortal":
Crea un script que pida dos números y los divida.
Usa
try-exceptpara capturar el errorZeroDivisionError(si el usuario divide por 0) y el errorValueError(si el usuario introduce letras en lugar de números).El programa no debe cerrarse con error; debe avisar al usuario del fallo cometido.
Filtrado de Usuarios (Lambda y Filter):
Tienes esta lista de usuarios:
usuarios = ["admin_pepe", "user_juan", "admin_ana", "user_marta"].Usa la función
filter()y unalambdapara crear una nueva lista que contenga solo los usuarios que empiezan por "admin_".Imprime la lista resultante.
Conversión de Almacenamiento (Map):
Tienes una lista de tamaños en GB:
discos_gb = [120, 240, 480, 1000].Usa
map()y unalambdapara convertir todos esos valores a MB (multiplicando por 1024).Muestra la nueva lista por pantalla.