flask提供了一个专门用来处理应用错误的装饰器errorhandler, 利用这个装饰器,你可以非常轻松的实现对系统错误异常的捕捉和处理。
errorhandler可以传入http code,例如404,500。这是比较常见的请求错误,如果能够为这种错误提供专门的页面,无疑会提高用户的体验。除了http code, 还可以传入异常类,捕捉特定的异常。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
0/0
return 'index'
@app.route('/user')
def user():
raise ValueError
return 'user'
@app.errorhandler(404)
def error(e):
print('捕捉到404')
return 'error', 404
@app.errorhandler(ZeroDivisionError)
def catch_except(e):
return '捕捉到异常'+ str(e), 500
@app.errorhandler(Exception)
def catch_all_except(e):
return '捕捉任意异常'+ str(e), 500
if __name__ == '__main__':
app.run()
你可以捕捉特定的异常,做特定的处理,也可以捕捉任意异常,只需要传入参数Exception即可。
如果某个特定异常被抛出后,有专门处理的函数,那么优先由这个函数进行处理。例如视图函数index抛出ZeroDivisionError,那么优先由catch_except函数进行处理,如果没有专门的处理函数,则由catch_all_except进行处理。
如果错误发生在蓝图里,则优先由在蓝图里注册的错误处理器进行处理,404错误不在其中,因为404错误发生的更早,蓝图里检测不到。
QQ交流群: 211426309