enter:进入 with 代码块时自动执行(可开启事务);
exit:退出 with 代码块时自动执行,该方法会接收异常类型、异常对象、堆栈信息参数,可判断是否发生异常:无异常则提交事务,出现异常则回滚事务。
python
class DBTransaction:
def __enter__(self):
# 开启事务
print("开启数据库事务")
return self
def __exit__(self, exc_type, exc_val, exc_tb):
# exc_type不为None代表出现异常
if exc_type is None:
print("无异常,提交事务")
else:
print("出现异常,回滚事务")
# 返回False会向外抛出异常,True则屏蔽异常
return False
# 使用with管理事务
with DBTransaction():
print("执行数据库操作...")
# 若此处抛出异常,__exit__会捕获并回滚