Articles of contextmanager

¿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, […]

Gestor de contexto para MySQLdb de Python

Estoy acostumbrado a (¿estropeado por?) La interfaz SQLite de Python para tratar con bases de datos SQL. Una buena característica de la API SQLite de python es el “administrador de contexto”, es decir, python’s with statement. Normalmente ejecuto consultas de la siguiente manera: import as sqlite with sqlite.connect(db_filename) as conn: query = “INSERT OR IGNORE […]

Error de Lib de multiprocesamiento de Python (AttributeError: __exit__)

Estoy recibiendo este error al usar el pool.map(funct, iterable) : AttributeError: __exit__ Sin Explicación, solo apile la traza al archivo pool.py dentro del módulo. utilizando de esta manera: with Pool(processes=2) as pool: pool.map(myFunction, mylist) pool.map(myfunction2, mylist2) Sospecho que podría haber un problema con la picklability (Python necesita pickle , o transformar los datos de la […]

Alternativa a contextlib.nested con número variable de administradores de contexto

Tenemos un código que invoca un número variable de administradores de contexto en función de los parámetros de tiempo de ejecución: from contextlib import nested, contextmanager @contextmanager def my_context(arg): print(“entering”, arg) try: yield arg finally: print(“exiting”, arg) def my_fn(items): with nested(*(my_context(arg) for arg in items)) as managers: print(“processing under”, managers) my_fn(range(3)) Sin embargo, contextlib.nested está […]

¿Cómo usar socket en Python como administrador de contexto?

Parece que sería natural hacer algo como: with socket(socket.AF_INET, socket.SOCK_DGRAM) as s: pero Python no implementa un administrador de contexto para socket. ¿Puedo usarlo fácilmente como administrador de contexto, y si es así, cómo?

¿Crear un bloque “con” en varios gestores de contexto?

Supongamos que tiene tres objetos que adquiere a través del administrador de contexto, por ejemplo, un locking, una conexión db y un socket ip. Puedes adquirirlos por: with lock: with db_con: with socket: #do stuff ¿Pero hay una manera de hacerlo en un bloque? algo como with lock,db_con,socket: #do stuff Además, si es posible, dado […]