在发生异常时,我希望回滚我的db会话,因此我尝试:
@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()我测试通过强制代码出错来引发异常,甚至使用以下方法:
raise Exception("bacoff")但它总是打印"Teardown 1 None"和"good"。
令我困惑的是,一旦我通过app.run(debug=False)**,关闭了调试模式,异常就会显示正确:**
Teardown 1 Exception('bacoff',)
>>>> Exception Happaned <<<<
good所以,我不知道这是Flask框架的错误还是我的配置错误.
我的ENV是:
发布于 2013-05-16 12:50:33
我终于解决了这个问题
App.config‘’PRESERVE_CONTEXT_ON_EXCEPTION‘= False
解决方案来自http://github.com/mitsuhiko/flask/issues/661#issuecomment-11975645。
发布于 2013-05-13 06:12:08
看看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()https://stackoverflow.com/questions/16499023
复制相似问题