由于是公司内网系统的代码,图片这些暂无,问题如下:
在工作中用到了接口和界面等自动化测试,大部分断言需要调用数据库,这是大前提;
直入主题~
我在项目中写了一个configDB的模块专用于封装数据库操作,在最后写了个析构函数
def __del__(self):
self.db.close()
就这个鬼,想法是在这个析构函数中加入日志的打印,记录数据库连接的关闭,蛋py该死的机制限制了这个想象,无法在析构函数中使用或调用open函数。。。
没办法,另辟蹊径,使用装饰器给__del__添加了功能,主要目的是加上打印日志的那句话,执行在析构函数执行之后。。 代码如下:
@decorator.dbclose_log
def __del__(self):
self.db.close()
def dbclose_log(func):
def wrapper(*args, **kwargs):
wrapper.__name__ = func.__name__
try:
func(*args, **kwargs)
except Exception:
msg = traceback.format_exc()
log.excute_log(error_msg=msg)
原装手打,100%还原
现在问题来了,使用装饰器后,成功或不成功的概率参半,错误提示就是析构函数不能使用open,所以现在非常懵逼,请各位大佬指教,这块如何才能完美使用。。
强迫症患者的心病,害怕发展成抑郁