4

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"

私を混乱させたのは、DEBUGモードを閉じるとapp.run(debug=False)、例外が正しく表示されることです:

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

だから、これがFlaskフレームワークのバグなのか、私の設定ミスなのかはわかりません...

私のENVは:

  • 美しいスープ 3.2.1
  • フラスコ 0.9
  • Flask ログイン 0.1.3
  • フラスコメール 0.8.2
  • フラスコ-OpenID 1.1.1
  • Flask-SQLAlchemy 0.16
  • フラスコ-WTF 0.8.3
  • Flask-WhooshAlchemy 0.55a
  • ジンジャ2 2.6
  • SQLAlchemy 0.8.1
  • テンピータ 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
  • python-openid 2.2.5
  • リクエスト 1.2.0
  • sqlalchemy-migrate 0.7.2
  • wsgiref 0.1.2
4

2 に答える 2

2

追加することで最終的に解決しました

app.config['PRESERVE_CONTEXT_ON_EXCEPTION'] = False

解決策はhttp://github.com/mitsuhiko/flask/issues/661#issuecomment-11975645にあります。

于 2013-05-16T12:50:33.493 に答える