我想在发生异常时回滚我db
会议,所以我尝试:为什么Flask teardown_request在调试模式下无法获取异常对象(始终为无,但debug = True时正常)?
@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
所以,我不知道这是瓶框架的一个bug,或我的配置故障...
我ENV是:
- BeautifulSoup 3.2.1
- 瓶0.9
- 烧瓶登录0.1.3
- 瓶邮件0.8.2
- 烧瓶的OpenID 1.1.1
- 烧瓶SQLAlchemy的0.16
- 烧瓶WTF 0.8.3
- 烧瓶WhooshAlchemy 0.55A
- 的Jinja2 2.6
- SQLAlchemy的0.8.1
- Tempita 0.5.1 个
- WTForms 1.0.3
- WERKZEUG 0.8.3
- 嗖2.4.1
- 信号灯1.2
- 装饰3.4.0
- LXML 3.2.0
- pycurl 7.19.0
- 蟒-openid 2.2.5
- 请求1.2.0
- sqlalchemy-migrate 0.7.2
- 0.1.2的wsgiref
teardown_request与异常无关:http://flask.pocoo.org/docs/api/#flask.Flask.teardown_request – thkang 2013-05-11 19:38:01
该文件显示“当一个拆卸函数因异常而被调用时,它将被传递一个错误对象“,所以我认为一旦引发异常就会传递给teardown_request函数,对吗?除此之外,当DEBUG = True模式时,我可以得到异常。这些让我感到困惑。 – 2013-05-12 00:30:26