python - 为什么Flask teardown_request在debug模式下获取不到异常对象(总是None,debug=True时正常)?

标签 python flask

我想在发生异常时回滚我的 db session ,所以我尝试了:

@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) 关闭 DEBUG 模式, 异常显示正确:

Teardown 1 Exception('bacoff',)
>>>> Exception Happaned <<<<
good

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

我的环境是:

  • BeautifulSoup 3.2.1
  • flask 0.9
  • Flask-Login 0.1.3
  • Flask-Mail 0.8.2
  • Flask-OpenID 1.1.1
  • Flask-SQLAlchemy 0.16
  • Flask-WTF 0.8.3
  • Flask-WhooshAlchemy 0.55a
  • Jinja2 2.6
  • SQLAlchemy 0.8.1
  • 坦皮塔 0.5.1
  • WTForms 1.0.3
  • Werkzeug 0.8.3
  • Whoosh 2.4.1
  • 信号灯 1.2
  • 装饰器 3.4.0
  • lxml 3.2.0
  • pycurl 7.19.0
  • python-openid 2.2.5
  • 请求 1.2.0
  • sqlalchemy-migrate 0.7.2
  • wsgiref 0.1.2

最佳答案

我终于通过添加解决了它

app.config['PRESERVE_CONTEXT_ON_EXCEPTION'] = False

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

关于python - 为什么Flask teardown_request在debug模式下获取不到异常对象(总是None,debug=True时正常)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16499023/

相关文章:

python - 与字符串格式对齐

python - 属性错误 : module 'cv2.cv2' has no attribute 'CV_LOAD_IMAGE_COLOR'

json - PYODBC 截断 SQL Server FOR JSON 查询的响应

python - 有没有办法获取 Docker 容器外部的 Python 程序引发的错误并进行处理?

python - 使用 Python 将一行与多个正则表达式匹配

python - Django form.save一步一步

python - 2. 类级别的 django Manager?

python-3.x - 如何在 Flask Wtform 的提交按钮中添加很棒的字体图标?

python - Python 如何使用 Gunicorn 和 Kubernetes 进行扩展?

javascript - 使用 python Flask 应用程序在 Heroku 上未显示 highcharts