我想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()
添加回答
举报
0/150
提交
取消