当我执行一个简单的查询(我使用的是tornado.database模块)时,我处理的异常如下:
try:
self.application.db.execute('DELETE FROM table_one WHERE a = 1')
except Exception, e:
logging.warning('DB exception: %s' % e)
self.set_status(500)
return
但是,如果我想做一个事务,那么在出现异常时回滚它是明智的:
try:
self.application.db.execute('START TRANSACTION')
self.application.db.execute('DELETE FROM table_one WHERE a = 1')
self.application.db.execute('DELETE FROM table_two WHERE b = 2')
self.application.db.execute('COMMIT')
except Exception, e:
logging.warning('DB exception: %s' % e)
self.set_status(500)
self.application.db.execute('ROLLBACK')
return
但是,如果回滚也会导致异常(例如,如果连接失败),怎么办?是否需要在put块中放置嵌套的try-put块?
发布于 2012-10-05 12:10:49
进行嵌套的尝试..。除了块之外,块是一种解决方案。但我最终还是会使用:
try:
...
except ... :
finally:
# cleanup (close the connection, etc...)
我的意思是,如果回滚失败了,那么记录异常并进行清理几乎没有什么可做的了,对吗?
发布于 2014-09-16 09:45:34
最好检查这里的建议
根据PEP,我想在此强调以下几点:
https://stackoverflow.com/questions/12745455
复制相似问题