Algunos antecedentes: trabajo en un gran banco y estoy tratando de reutilizar algunos módulos de Python, que no puedo modificar, solo importo. Tampoco tengo la opción de instalar nuevas utilidades/funciones, etc. (ejecutando Python 2.6 en Linux).Python missing __exit__ method
tengo esta en la actualidad:
En mi módulo:
from common.databaseHelper import BacktestingDatabaseHelper
class mfReportProcess(testingResource):
def __init__(self):
self.db = BacktestingDatabaseHelper.fromConfig('db_name')
Uno de los métodos llamados dentro de la clase 'testingResource' tiene esto:
with self.db as handler:
que cae terminado con esto:
with self.db as handler:
AttributeError: 'BacktestingDatabaseHelper' object has no attribute '__exit__'
y, de hecho, no existe el método __exit__
en la clase 'BacktestingDatabaseHelper', una clase que no puedo cambiar.
Sin embargo, este código que estoy tratando de reutilizar funciona perfectamente para otras aplicaciones. ¿Alguien sabe por qué me sale este error y nadie más? ¿Hay alguna forma de definir localmente el __exit__
?
Muchas gracias de antemano.
Editado para añadir:
He intentado añadir mi propia clase para configurar el acceso DB pero no puedo conseguir que funcione - añadido esto a mi módulo:
class myDB(BacktestingDatabaseHelper):
def __enter__(self):
self.db = fromConfig('db_name')
def __exit__(self):
self.db.close()
y ha añadido:
self.db = myDB
en mi init atributo para mi clase principal, pero me sale este error:
with self.db as handler:
TypeError: unbound method __enter__() must be called with myDB instance as first argument (got nothing instead)
¿Alguna sugerencia sobre cómo hacer esto correctamente?
Están usando una versión diferente del módulo o no están usando 'BacktestingDatabaseHelper' como administrador de contexto –
. Tendría que saber qué real '__enter__' y' __exit__' do, y haz lo mismo. Si el mismo código funciona para otras personas en su empresa, realmente le sugiero que compruebe la versión y el contenido de cada uno de los módulos comunes. –