为了账号安全,请及时绑定邮箱和手机立即绑定

为什么Flask teardown_request在调试模式下无法获取异常对象?

为什么Flask teardown_request在调试模式下无法获取异常对象?

鸿蒙传说 2021-03-23 10:15:15
我想db在发生异常时回滚我的会话,所以我尝试了:@app.teardown_requestdef 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()我通过强制代码出错来进行测试以引发异常,即使使用此代码也是如此:raise Exception("bacoff")但是它总是打印"Teardown 1 None"和"good"。让我感到困惑的是,一旦我通过关闭了DEBUG模式app.run(debug=False),该异常就显示正确了:Teardown 1 Exception('bacoff',)>>>> Exception Happaned <<<<good所以,我不知道这是Flask框架的错误,还是我的配置错误...
查看完整描述

2 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

查看dispatch_request和full_dispatch_request:首先调用您的视图,其次捕获您的视图异常。只需dispatch_request使用您的错误处理程序即可覆盖,但是Flask为此提供了特殊的机制:error_handler_spec。因此,您可以使用errorhandler或register_error_handler注册处理程序以捕获异常。


@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()


查看完整回答
反对 回复 2021-03-23
  • 2 回答
  • 0 关注
  • 465 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号