Gestión de Errores y Programación Funcional en Python

 

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 el try.

  • 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 ErrorDeRed para 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:

  1. Funciones lambda: Funciones anónimas de una sola línea. lambda x: x * 2.

  2. map(): Aplica una función a todos los elementos de una lista. (Ej: Convertir todas las IPs de una lista a minúsculas).

  3. filter(): Crea una nueva lista solo con los elementos que cumplen una condición. (Ej: Filtrar solo los usuarios que son "admin").

  4. reduce(): Reduce una lista a un solo valor (necesita functools). (Ej: Sumar todo el espacio ocupado por varios discos).


💡 Ejemplo práctico: Validando un Puerto de Red

Python
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

  1. El script "Inmortal":

    • Crea un script que pida dos números y los divida.

    • Usa try-except para capturar el error ZeroDivisionError (si el usuario divide por 0) y el error ValueError (si el usuario introduce letras en lugar de números).

    • El programa no debe cerrarse con error; debe avisar al usuario del fallo cometido.

  2. 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 una lambda para crear una nueva lista que contenga solo los usuarios que empiezan por "admin_".

    • Imprime la lista resultante.

  3. Conversión de Almacenamiento (Map):

    • Tienes una lista de tamaños en GB: discos_gb = [120, 240, 480, 1000].

    • Usa map() y una lambda para convertir todos esos valores a MB (multiplicando por 1024).

    • Muestra la nueva lista por pantalla.