根据我的理解,如果代码报错了,那么after_request装饰器下的函数是不会执行的,但是下面这段代码
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
a = b # 这里应该会报错
return 'hello world'
@app.after_request
def after_request(response):
print('after_request')
return response
app.run(debug=False)
输出结果为:
NameError: name 'b' is not defined
127.0.0.1 - - [17/Jul/2019 23:30:41] "GET / HTTP/1.1" 500 -
**after_request**
这里还是打印出了after_request,有点没搞懂
这个问题和
after_request
的设计有关,点击这里可以查看相应的issue。设置DEBUG模式的方法可以参考官方文档。你可以设置环境变量
FLASK_DEBUG
为1
,再次运行应用就会发现after_request
在抛出异常后不会被执行。简单来说,
after_request
在DEBUG模式下,抛出异常不会被执行,但是如果是非DEBUG模式的话就会被执行。如果你需要一个稳定的、在任何模式下抛出异常后会执行的函数,则可以考虑teardown_request
,因为它无论是否抛出异常最终都会被执行。