Desarrollador Python: pregunta de entrevista
¿Cómo funcionan los context managers de Python?
Un context manager delimita adquisición y limpieza mediante __enter__ y __exit__, garantizando la limpieza tanto al terminar como ante una excepción; se utiliza con with.
Respuesta directa
Qué debe cubrir una buena respuesta
Cómo funciona
La sentencia with llama a __enter__ al entrar, asocia su valor de retorno al objetivo y garantiza que __exit__ corre al salir, sea por finalización normal, return o excepción. __exit__ recibe los detalles de la excepción y puede suprimirla devolviendo True, algo que rara vez se quiere. contextlib.contextmanager convierte un generador con un único yield en un context manager, y ExitStack compone un número variable de ellos. El patrón sirve para cualquier cosa con preparación y limpieza, no solo ficheros y locks.
Ejemplo
Un envoltorio de sesión de base de datos abre una transacción en __enter__, confirma en __exit__ si no hubo excepción y revierte en caso contrario, así que el código de negocio queda libre de try y finally. Un helper de pruebas escrito con contextmanager sobrescribe temporalmente una variable de entorno y la restaura aunque la aserción falle.
Errores frecuentes
- Devolver True desde __exit__ por accidente y tragarse todas las excepciones en silencio.
- Adquirir el recurso en __init__ en lugar de __enter__, de modo que existe antes del bloque with.
- Anidar muchos with a mano cuando ExitStack mantendría el código plano.
Una estructura útil para responder
Responde desde tu propia experiencia.
No memorices un guion: usa solo ejemplos que puedas explicar con honestidad en preguntas posteriores.
Abre el espacio de trabajo de escritorio y ensaya una respuesta clara con tus propias palabras.