¿Para qué se utiliza la palabra clave python “con”?

¿Para qué se utiliza la palabra clave de python “con”?

Ejemplo de: http://docs.python.org/tutorial/inputoutput.html

>>> with open('/tmp/workfile', 'r') as f: ... read_data = f.read() >>> f.closed True 

En python, la palabra clave with se usa cuando se trabaja con recursos no administrados (como flujos de archivos). Es similar a la statement de using en VB.NET y C #. Le permite asegurarse de que un recurso se “limpie” cuando el código que lo utiliza termina de ejecutarse, incluso si se producen excepciones. Proporciona ‘azúcar sintáctica’ para los bloques try/finally .

Desde Python Docs :

La statement with aclara el código que anteriormente usaría los bloques try...finally para garantizar que se ejecute el código de limpieza. En esta sección, discutiré la statement como se usará comúnmente. En la siguiente sección, examinaré los detalles de la implementación y mostraré cómo escribir objetos para usar con esta statement.

La instrucción with es una estructura de control-flujo cuya estructura básica es:

 with expression [as variable]: with-block 

La expresión se evalúa y debe dar como resultado un objeto que admita el protocolo de administración de contexto (es decir, tiene los __enter__() y __exit__() ).

Actualización de la llamada VB fija por el comentario de Scott Wisniewski. De hecho, estaba confundiendo con el using .

Explicación del blog Preshing on Programming :

Es útil cuando tiene dos operaciones relacionadas que le gustaría ejecutar como un par, con un bloque de código en medio. El ejemplo clásico es abrir un archivo, manipularlo y luego cerrarlo:

  with open('output.txt', 'w') as f: f.write('Hi there!') 

Lo anterior con una statement cerrará automáticamente el archivo después del bloque de código nested. (Continúe leyendo para ver exactamente cómo se produce el cierre). La ventaja de usar una statement with es que se garantiza que se cierre el archivo sin importar cómo salga el bloque nested. Si se produce una excepción antes del final del bloque, cerrará el archivo antes de que la excepción sea detectada por un controlador de excepciones externo. Si el bloque nested tuviera que contener una statement de retorno, o una instrucción de continuar o romper, la instrucción with también cerraría automáticamente el archivo en esos casos.