Articles of contextmanager

¿Dónde se definen los __enter __ () y __exit __ () de un objeto incorporado en Python?

He leído que los métodos __ enter __ () y __ exit __ () del objeto se llaman cada vez que se usa ‘con’. Entiendo que para los objetos definidos por el usuario, puede definir esos métodos usted mismo, pero no entiendo cómo funciona esto para los objetos / funciones incorporados como ‘abrir’ o incluso […]

¿Por qué el administrador de contexto de conexión MySQLdb no cierra el cursor?

MySQLdb Connections tiene un administrador de contexto rudimentario que crea un cursor al ingresar , retrocede o se confirma al salir , y no suprime implícitamente las excepciones. Desde la fuente de conexión : def __enter__(self): if self.get_autocommit(): self.query(“BEGIN”) return self.cursor() def __exit__(self, exc, value, tb): if exc: self.rollback() else: self.commit() Entonces, ¿alguien sabe por […]

Python ‘con’ statement, ¿debería usar contextlib.closing?

from contextlib import closing def init_db(): with closing(connect_db()) as db: with app.open_resource(‘schema.sql’) as f: db.cursor().executescript(f.read()) db.commit() Esto es del tutorial de matraz Paso 3 ( http://flask.pocoo.org/docs/tutorial/dbinit/#tutorial-dbinit ). Y tengo un poco de curiosidad por la línea 4 de eso. ¿Debo importar y usar ese método ‘contextlib.closing ()’? Cuando he aprendido acerca de la statement, muchos […]

Cómo usar un administrador de contexto dentro de un decorador y cómo pasar un objeto creado en decorador a función decorada

Tengo una clase de prueba que requiere hacer un poco de limpieza al final. Para asegurarme de que el usuario no se olvide de hacer esto, quiero agregar un administrador de contexto a la clase. También tengo un decorador, dentro del cual quiero usar este administrador de contexto para crear un objeto de clase de […]

Cambiando temporalmente el valor de una variable en Python

Python 3.4 proporciona esta herramienta ingeniosa para redireccionar temporalmente la salida estándar: # From https://docs.python.org/3.4/library/contextlib.html#contextlib.redirect_stdout with redirect_stdout(sys.stderr): help(pow) El código no es muy complicado, pero no me gustaría escribirlo una y otra vez, especialmente porque se lo ha pensado para que vuelva a ingresar: class redirect_stdout: def __init__(self, new_target): self._new_target = new_target # We use […]

StringIO y compatibilidad con la statement ‘with’ (administrador de contexto)

Tengo un código heredado con una función heredada que toma un nombre de archivo como argumento y procesa el contenido del archivo. A continuación se muestra un fax de trabajo del código. Lo que quiero hacer es no tener que escribir en el disco con algo de contenido que genero para usar esta función heredada, […]

¿Cómo puedo esperar a que el __del__ de un objeto termine antes de que se cierre el bucle asíncrono?

Tengo una clase que tendrá un objeto aiohttp.ClientSession en ella. Normalmente cuando usas async with aiohttp.ClientSession() as session: # some code La sesión se cerrará ya que se llama al método __aexit__ de la sesión. No puedo usar un administrador de contexto ya que quiero mantener la sesión persistente durante toda la vida útil del […]

¿Por qué mi función de administrador de contexto no funciona como mi clase de administrador de contexto en python?

En mi código, necesito poder abrir y cerrar un dispositivo correctamente y, por lo tanto, ver la necesidad de usar un administrador de contexto. Si bien un administrador de contexto generalmente se define como una clase con los métodos __enter__ y __exit__ , también parece existir la posibilidad de decorar una función para usarla con […]

Gestores de contexto en Matlab: invocando __enter__ en Matlab

Tengo un paquete de python y me gustaría usar sus clases y métodos en Matlab. Sé que esto se puede hacer directamente desde Matlab 2014b. Quiero decir que todo lo que tienes que hacer es agregar py. Al comienzo de tus declaraciones. Hasta ahora todo bien, sin embargo, no pude averiguar cómo tratar con los […]

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?