Articles of contextmanager

Archivo abrir y cerrar en python

He leído que cuando el archivo se abre con el siguiente formato with open(filename) as f: #My Code f.close() No se requiere el cierre explícito del archivo. ¿Alguien puede explicar por qué es así? Además, si alguien cierra explícitamente el archivo, ¿tendrá algún efecto no deseado?

El registrador Python no está imprimiendo mensajes de depuración, aunque está configurado correctamente

Tengo el siguiente código, donde solo quiero jugar con el módulo de registro utilizando contextmanager . from contextlib import contextmanager import logging @contextmanager def log_level(level, name): logger = logging.getLogger(name) old_level = logger.getEffectiveLevel() print(‘log_level.old_level: ‘ + str(old_level)) logger.setLevel(level) print(‘log_level.new_level: ‘ + str(logger.getEffectiveLevel())) try: yield logger finally: logger.setLevel(old_level) if __name__ == ‘__main__’: with log_level(logging.DEBUG, ‘my-log’) as logger: […]

El objective de la statement `with` de Python es inesperadamente Ninguno

Parece que no entiendo algo con — el python with statement. Considera esta clase: class test(object): def __enter__(self): pass def __exit__(self, *ignored): pass ahora, cuando se usa with , como en with test() as michael: print repr(michael) Espero algún resultado como . Pero no tengo ninguno . Algo malo aquí? Cualquier sugerencia ayudaría. (Estoy usando […]

¿Es Python * con * instrucción exactamente equivalente a un bash – (excepto) – finalmente bloquear?

Sé que esto fue ampliamente discutido, pero todavía no puedo encontrar una respuesta para confirmar esto: es la sentencia with idéntica a llamar al mismo código en un bloque try – (excepto) -finally, donde cualquiera que se defina en la función __exit__ de El gestor de contexto se coloca en el bloque finalmente? Por ejemplo, […]

Python contextmanager problema de nueva línea

Usando el administrador de contexto de Python, quiero generar un contenedor para mostrar el progreso similar a Linux de un bloque de código determinado: Doing something… done. [42 ms] Esto está funcionando – tipo de: from contextlib import contextmanager import time @contextmanager def msg(m): print(m + “… “, end=”) t_start = time.time() yield t_duration_ms = […]

¿Cómo manipular la excepción en __exit__ de un administrador de contexto?

Sé que es un estilo malo volver a generar una excepción desde el método __exit__() un administrador de contexto. Por lo tanto, me gustaría agregar un atributo a la instancia que pueda llevar información contextual que no esté disponible si dejo que la excepción se filtre o si la capto. Esto evitará volver a subirlo. […]

¿Es una buena práctica depender de python con … como statement?

Tengo curiosidad por saber si se considera seguro o una buena práctica depender de python’s con … como afirmación. Por ejemplo al abrir un archivo: with open(“myfile”,”w”) as myFile: #do something Así que en este ejemplo, me myFile.close() llamar explícitamente a myFile.close() sin embargo, puedo asumir que fue llamado cuando Python salió de la instrucción […]

Python construido de forma simulada ‘abierto’ en una clase usando dos archivos diferentes

Estoy teniendo problemas para descubrir cómo simular dos archivos abiertos en una clase cuando ambos usan administradores de contexto. Sé cómo hacerlo para un archivo administrado por contexto usando el módulo simulado como este: @patch(‘__builtin__.open’) def test_interface_mapping(self, mock_config): m = MagicMock(spec=file) handle = m.return_value.__enter__.return_value handle.__iter__.return_value = (‘aa’, ‘bb’) Mi problema es cómo hacer esto cuando […]

Significado de la frase “con” sin la palabra clave “as”

Estoy familiarizado con el uso de python’s with statement como un medio para asegurar la finalización de un objeto en el caso de que se produzca una excepción. Esto usualmente se ve como with file.open(‘myfile.txt’) as f: do stuff… que es mano corta para f = file.open(‘myfile.txt’): try: do stuff… finally: f.close() o cualquier otra […]

Detectando una excepción en el administrador de contexto __enter __ ()

¿Es posible garantizar que se __exit__() método __exit__() incluso si hay una excepción en __enter__() ? >>> class TstContx(object): … def __enter__(self): … raise Exception(‘Oops in __enter__’) … … def __exit__(self, e_typ, e_val, trcbak): … print “This isn’t running” … >>> with TstContx(): … pass … Traceback (most recent call last): File “”, line 1, […]