gpt4 book ai didi

Python 缺少 __exit__ 方法

转载 作者:太空狗 更新时间:2023-10-30 00:21:43 24 4
gpt4 key购买 nike

一些背景:我在一家大银行工作,我试图重新使用一些 Python 模块,我无法更改,只能导入。我也没有安装任何新实用程序/功能等的选项(在 Linux 上运行 Python 2.6)。

我目前有这个:

在我的模块中:

from common.databaseHelper import BacktestingDatabaseHelper

class mfReportProcess(testingResource):
def __init__(self):
self.db = BacktestingDatabaseHelper.fromConfig('db_name')

在“testingResource”类中调用的方法之一是这样的:

 with self.db as handler:

由此而倒下:

with self.db as handler:
AttributeError: 'BacktestingDatabaseHelper' object has no attribute '__exit__'

而且,事实上,'BacktestingDatabaseHelper' 类中没有 __exit__ 方法,这是我无法更改的类。

但是,我尝试重用的这段代码在其他应用程序中运行得非常好——有谁知道为什么我会收到此错误而其他人却没有?有什么方法可以在本地定义 __exit__ 吗?

非常感谢。

编辑添加:

我已经尝试添加我自己的类来设置数据库访问但无法让它工作 - 将其添加到我的模块中:

class myDB(BacktestingDatabaseHelper): 
def __enter__(self):
self.db = fromConfig('db_name')
def __exit__(self):
self.db.close()

并添加:

self.db = myDB 

进入我的主类的 init 属性,但出现此错误:

with self.db as handler:
TypeError: unbound method __enter__() must be called with myDB instance as first argument (got nothing instead)

关于如何正确执行此操作有什么建议吗?

最佳答案

使用 with 协议(protocol)假定 with 中使用的对象实现了 context manager protocol .

基本上这意味着类定义应该定义__enter__()__exit__() 方法。如果您使用没有这些的对象,python 将抛出一个 AttributeError 提示缺少 __exit__ 属性。

关于Python 缺少 __exit__ 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10736671/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com