CodeForge

Python de Cero a Experto / Python intermedio

Context managers: la sentencia with

Teoría20 min20 XP

Cuando abres un recurso —un archivo, una conexión, un candado— tienes que CERRARLO al terminar, incluso si ocurre un error en el medio. Olvidarlo causa fugas y datos corruptos. La sentencia with (los CONTEXT MANAGERS) garantiza ese cierre automáticamente: abre el recurso, te deja usarlo, y lo cierra al salir del bloque, pase lo que pase. Es una de las construcciones más elegantes de Python. Hoy la dominas y aprendes a crear la tuya.

El grifo que se cierra solo

with: abrir y cerrar seguro

with open(...) as archivo: abre el archivo y lo asigna a archivo; al terminar el bloque indentado, Python lo CIERRA automáticamente —no necesitas llamar a close()—. Y lo hace INCLUSO si ocurre un error dentro del bloque (ahí está su magia). Sin with, tendrías que cerrar el archivo a mano y envolver todo en try/finally para asegurarlo. El with hace eso por ti, limpio. (Nota: aquí el archivo vive en la memoria del navegador; en tu Python instalado sería un archivo real en tu disco.)

Por qué with y no cerrar a mano

Crear tu propio context manager

¿Qué garantiza la sentencia with y por qué se prefiere a cerrar un recurso manualmente?

Mini-reto

Usa y crea context managers: 1) escribe una lista de gastos en un archivo con with open(..., "w") (una línea por gasto) y léelo de vuelta con otro with; 2) crea un context manager @contextmanager llamado seccion(titulo) que imprima una línea de = con el título al entrar y otra al salir (para enmarcar la salida de un bloque); 3) úsalo con with seccion("Reporte"): alrededor de unos print. Observa cómo el "antes" y el "después" se ejecutan solos.

Qué sigue

Ya manejas recursos con seguridad. La próxima lección profundiza en el trabajo con ARCHIVOS usando pathlib —la forma moderna de manejar rutas y archivos en Python— para leer, escribir y organizar datos en tu disco. La base para que tus programas recuerden cosas entre ejecuciones.