首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >处理数据库时处理异常的正确方法

处理数据库时处理异常的正确方法
EN

Stack Overflow用户
提问于 2012-10-05 11:35:52
回答 2查看 11K关注 0票数 1

当我执行一个简单的查询(我使用的是tornado.database模块)时,我处理的异常如下:

代码语言:javascript
运行
复制
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

但是,如果我想做一个事务,那么在出现异常时回滚它是明智的:

代码语言:javascript
运行
复制
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块?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-05 12:10:49

进行嵌套的尝试..。除了块之外,块是一种解决方案。但我最终还是会使用:

代码语言:javascript
运行
复制
try:
  ...
except ... :

finally:
   # cleanup (close the connection, etc...)

我的意思是,如果回滚失败了,那么记录异常并进行清理几乎没有什么可做的了,对吗?

票数 2
EN

Stack Overflow用户

发布于 2014-09-16 09:45:34

最好检查这里的建议

根据PEP,我想在此强调以下几点:

  • 不要抓住一般的例外
  • 不要提出一般的例外
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12745455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档