首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么teardown_request无法在调试模式下获得异常对象(始终为无,但正常时为debug=True)?

为什么teardown_request无法在调试模式下获得异常对象(始终为无,但正常时为debug=True)?
EN

Stack Overflow用户
提问于 2013-05-11 15:55:09
回答 2查看 3.6K关注 0票数 4

在发生异常时,我希望回滚我的db会话,因此我尝试:

代码语言:javascript
复制
@app.teardown_request
def teardown_request(exception):
    print "Teardown 1 {0!r}".format(exception)
    if exception:
        print ">>>> Exception Happaned <<<<"
        db.session.rollback()
        db.session.remove()
    print "good"
    db.session.remove()

我测试通过强制代码出错来引发异常,甚至使用以下方法:

代码语言:javascript
复制
raise Exception("bacoff")

但它总是打印"Teardown 1 None""good"

令我困惑的是,一旦我通过app.run(debug=False)**,关闭了调试模式,异常就会显示正确:**

代码语言:javascript
复制
Teardown 1 Exception('bacoff',)
>>>> Exception Happaned <<<<
good

所以,我不知道这是Flask框架的错误还是我的配置错误.

我的ENV是:

  • BeautifulSoup 3.2.1
  • 烧瓶0.9
  • 瓶-登录0.1.3
  • 瓶-邮件0.8.2
  • 瓶-OpenID 1.1.1
  • 瓶-SQLAlchemy 0.16
  • 瓶-WTF 0.8.3
  • 烧瓶-呜呜炼金术0.55a
  • Jinja2 2.6
  • SQLAlchemy 0.8.1
  • Tempita 0.5.1
  • WTForms 1.0.3
  • 韦克祖格0.8.3
  • 呼呼2.4.1
  • 闪光灯1.2
  • 装饰师3.4.0
  • lxml 3.2.0
  • 吡虫啉7.19.0
  • python-openid 2.2.5
  • 请求1.2.0
  • 方炼金术-迁移0.7.2
  • wsgiref 0.1.2
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-16 12:50:33

我终于解决了这个问题

App.config‘’PRESERVE_CONTEXT_ON_EXCEPTION‘= False

解决方案来自http://github.com/mitsuhiko/flask/issues/661#issuecomment-11975645

票数 2
EN

Stack Overflow用户

发布于 2013-05-13 06:12:08

看看dispatch_requestfull_dispatch_request:首先调用您的视图,然后捕获您的视图异常。您可以简单地用错误处理程序覆盖dispatch_request,但是Flask为此提供了特殊的机制:error_handler_spec。因此,您可以使用errorhandlerregister_error_handler注册处理程序来捕获异常。

代码语言:javascript
复制
@app.errorhandler(YourException)
def your_exception_handler(exception):
    print ">>>> Exception Happaned <<<<"
    db.session.rollback()
    return 'something wrong', 400

@app.teardown_request
def teardown_request(*args, **kwargs):
    print "good"
    db.session.remove()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16499023

复制
相关文章

相似问题

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