Почему, когда представление вызывает исключение, вызывается только одна функция Flask teardown_request?

Это простое приложение имеет два обработчика teardown_request , и я ожидаю, что оба они будут вызываться для каждого запроса, независимо от того, что происходит в реализации представления, согласно документации

import flask
import werkzeug.exceptions

app = flask.Flask(__name__)

@app.teardown_request
def teardown1(response):
    print "Teardown 1"
    return response

@app.teardown_request
def teardown2(response):
    print "Teardown 2"
    return response

@app.route("/")
def index():
    return "chunky bacon"

@app.route("/httpexception")
def httpexception():
    raise werkzeug.exceptions.BadRequest("no bacon?")

@app.route("/exception")
def exception():
    raise Exception("bacoff")

if __name__ == "__main__":
    app.run(port=5000)

Однако, когда я запускаю его и по очереди делаю запросы к трем представлениям, я получаю следующий результат:

Teardown 2
Teardown 1
127.0.0.1 - - [15/Nov/2011 18:53:16] "GET / HTTP/1.1" 200 -

Teardown 2
Teardown 1
127.0.0.1 - - [15/Nov/2011 18:53:27] "GET /httpexception HTTP/1.1" 400 -

Teardown 2
127.0.0.1 - - [15/Nov/2011 18:53:33] "GET /exception HTTP/1.1" 500 -

Только один из teardown_request функции вызываются, когда последнее представление вызывает исключение, не производное от werkzeug.exceptions.HTTPException . Есть идеи, почему, или это ошибка во флаконе?

9
задан Day 15 November 2011 в 19:40
поделиться