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.

Practica esta respuesta con MiraHint

Abre el espacio de trabajo de escritorio y ensaya una respuesta clara con tus propias palabras.

Descargar MiraHint
Preguntas de entrevista para Desarrollador Python