当我执行一个简单的查询(我正在使用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
但是,如果 rollback 也会导致异常(例如,如果连接失败),该怎么办?我是否需要在except块中放置一个嵌套的try-except块?
答案 0 :(得分:2)
在块中放置嵌套的try ...除了块是一个解决方案。 但我最后会去使用:
try:
...
except ... :
finally:
# cleanup (close the connection, etc...)
我的意思是如果回滚失败,那么几乎没有其他任何事情要做,然后记录异常和清理,对吧?
答案 1 :(得分:0)