使用一个函数处理全部 HTTP 错误

在 Flask 程序中,使用 app.errorhandler() 装饰器能够注册错误处理函数,传入 HTTP 错误状态码或是特定的异常类,好比:app

@app.errorhandler(404)
def error_404(e):
    return '404 Error', 404复制代码

若是发生 404 错误,就会触发这个函数获取返回值做为响应主体。函数

一般咱们会为不一样的 HTTP 错误编写各自的的错误处理函数,以便返回不一样的响应。若是你愿意的话,咱们也能够编写一个统一的错误处理函数,这个函数会处理全部的 HTTP 错误,只须要在装饰器内传入 Exception 类便可:spa

@app.errorhandler(Exception)
def all_exception_handler(e):
    return 'Error', 500复制代码

如今全部的 HTTP 错误都会触发这个函数。你也能够在函数中对错误进行分类处理:调试

@app.errorhandler(Exception) 
def all_exception_handler(e):
    # 对于 HTTP 异常,返回自带的错误描述和状态码
    # 这些异常类在 Werkzeug 中定义,均继承 HTTPException 类
    if isinstance(e, HTTPException):
        return e.desciption, e.code
    return 'Error', 500  # 通常异常复制代码

若是你使用 Flask 0.12 版本,则须要参考这个 SO 回答重写相关方法。code

附注一些关于错误处理的小知识:对象

  • 对于通常的程序异常(好比 NameError),若是没有特定的异常处理函数,默认都会触发 500 错误处理函数。
  • 开启调试模式的时候,500 错误会显示错误调试页面。
  • 500 错误发生时传入错误处理函数的是真正的异常对象,不是 Werkzeug 内置的 HTTP 异常类。
  • 内置的 HTTP 异常类的 description 和 code 属性分别返回错误描述和状态码。
相关文章
相关标签/搜索