python 作用with_即使__init__方法有效,Python中的With语句仍返...

对于具有以下init方法的数据库类:

class DB:

def __init__(self, dbprops):

self.dbprops = dbprops

self.conn = self.get_connection(self.dbprops)

debug("self.conn is %s" %self.conn)

def __enter__(self):

pass

def __exit__(self, exc_type, exc_val, exc_tb):

if not self.conn is None:

self.close()

对于调用它的客户端方法,如下所示:

with DB(self.dbprops) as db:

if not db:

raise Exception("Db is None inside with")

return db.get_cmdline_sql()

输出显示调试消息-因此成功调用了init方法:

File "./classifier_wf.py", line 28, in get_cmdline_mysql

raise Exception("Db is None inside with")

例外:Db在里面是None

更新:修复了enter方法以返回数据库对象的问题.但是需要有关如何调用它的帮助:

def __enter__(self, dbprops):

return DB(dbprops)

用单个参数调用它显然不起作用:

with DB(dbprops) as db:

TypeError: __enter__() takes exactly 2 arguments (1 given)

现在,我不再关注,因为应该自动填写“自我”.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值