全局错误处理程序的任何异常

乔斯卡森

有没有一种方法可以添加一个全局包罗万象的错误处理程序,可以在其中将响应更改为通用JSON响应?

我无法使用该got_request_exception信号,因为它不允许修改响应(http://flask.pocoo.org/docs/0.10/signals/)。

相反,所有信号处理程序均以未定义的顺序执行,并且不修改任何数据。

我宁愿不要包装该app.handle_exception函数,因为感觉就像是内部API。我想我正在寻找类似的东西:

 @app.errorhandler()
 def handle_global_error(e):
     return "Global error"

请注意,errorhandler不会接受任何参数,这意味着它将捕获所有未附加特定错误处理程序的异常/状态代码。我知道我可以使用errorhandler(500)errorhandler(Exception)捕获异常,但是abort(409)例如,如果这样做,它将仍然返回HTML响应。

盗贼大师

您可以使用@app.errorhandler(Exception)

演示(HTTPException检查可确保保留状态码):

from flask import Flask, abort, jsonify
from werkzeug.exceptions import HTTPException

app = Flask('test')

@app.errorhandler(Exception)
def handle_error(e):
    code = 500
    if isinstance(e, HTTPException):
        code = e.code
    return jsonify(error=str(e)), code

@app.route('/')
def index():
    abort(409)

app.run(port=1234)

输出:

$ http get http://127.0.0.1:1234/
HTTP/1.0 409 CONFLICT
Content-Length: 31
Content-Type: application/json
Date: Sun, 29 Mar 2015 17:06:54 GMT
Server: Werkzeug/0.10.1 Python/3.4.3

{
    "error": "409: Conflict"
}

$ http get http://127.0.0.1:1234/notfound
HTTP/1.0 404 NOT FOUND
Content-Length: 32
Content-Type: application/json
Date: Sun, 29 Mar 2015 17:06:58 GMT
Server: Werkzeug/0.10.1 Python/3.4.3

{
    "error": "404: Not Found"
}

如果您还想覆盖Flask的默认HTML异常(以便它们也返回JSON),请在以下代码之前添加以下内容app.run

from werkzeug.exceptions import default_exceptions
for ex in default_exceptions:
    app.register_error_handler(ex, handle_error)

对于较旧的Flask版本(<= 0.10.1,即当前的任何非git / master版本),将以下代码添加到您的应用程序中以显式注册HTTP错误:

from werkzeug import HTTP_STATUS_CODES
for code in HTTP_STATUS_CODES:
    app.register_error_handler(code, handle_error)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

NASM程序集中的异常/错误处理

来自分类Dev

AngularJS全局错误处理-自定义方法错误处理程序不会触发

来自分类Dev

在自举的Firefox扩展中设置全局错误处理程序

来自分类Dev

全局错误处理程序的控制器和操作

来自分类Dev

Flask/Python:用户定义异常的错误处理程序

来自分类Dev

ASP.NET MVC Core和Dapper中的全局异常/错误处理

来自分类Dev

如何测试全局AJAX错误处理

来自分类Dev

编码的UI全局错误处理

来自分类Dev

ExtJS中的全局错误处理

来自分类Dev

抛出异常/错误时的错误处理

来自分类Dev

错误处理程序中的错误处理

来自分类Dev

为什么我的错误处理程序不能处理异步中间件引发的异常?

来自分类Dev

TAP全局异常处理程序

来自分类Dev

全局异常处理程序WPF

来自分类Dev

Angular JS将数据传递给$ http一个全局错误处理程序

来自分类Dev

在angular.js应用程序中全局进行错误处理的最佳方法是什么?

来自分类Dev

如何使用Spring MVC / Spring Boot编写适当的全局错误处理程序

来自分类Dev

具有服务依赖性的Angular全局错误处理程序

来自分类Dev

Requirejs环境中Backbone.js ajax请求的全局错误处理程序

来自分类Dev

TypeScript和Koa 2:全局错误处理程序的异步/等待问题

来自分类Dev

如何在Redux中创建全局错误处理程序并在需要时覆盖它?

来自分类Dev

在angular.js应用程序中全局进行错误处理的最佳方法是什么?

来自分类Dev

Requirejs环境中Backbone.js ajax请求的全局错误处理程序

来自分类Dev

模块化Sinatra应用程序,可全局设置错误处理和配置

来自分类Dev

Angular JS将数据传递给$ http一个全局错误处理程序

来自分类Dev

错误处理程序在discord.py上引发异常(类型错误)

来自分类Dev

Scala:错误处理和异常匹配

来自分类Dev

C程序中的错误处理程序

来自分类Dev

VBA:错误处理程序中的错误

Related 相关文章

  1. 1

    NASM程序集中的异常/错误处理

  2. 2

    AngularJS全局错误处理-自定义方法错误处理程序不会触发

  3. 3

    在自举的Firefox扩展中设置全局错误处理程序

  4. 4

    全局错误处理程序的控制器和操作

  5. 5

    Flask/Python:用户定义异常的错误处理程序

  6. 6

    ASP.NET MVC Core和Dapper中的全局异常/错误处理

  7. 7

    如何测试全局AJAX错误处理

  8. 8

    编码的UI全局错误处理

  9. 9

    ExtJS中的全局错误处理

  10. 10

    抛出异常/错误时的错误处理

  11. 11

    错误处理程序中的错误处理

  12. 12

    为什么我的错误处理程序不能处理异步中间件引发的异常?

  13. 13

    TAP全局异常处理程序

  14. 14

    全局异常处理程序WPF

  15. 15

    Angular JS将数据传递给$ http一个全局错误处理程序

  16. 16

    在angular.js应用程序中全局进行错误处理的最佳方法是什么?

  17. 17

    如何使用Spring MVC / Spring Boot编写适当的全局错误处理程序

  18. 18

    具有服务依赖性的Angular全局错误处理程序

  19. 19

    Requirejs环境中Backbone.js ajax请求的全局错误处理程序

  20. 20

    TypeScript和Koa 2:全局错误处理程序的异步/等待问题

  21. 21

    如何在Redux中创建全局错误处理程序并在需要时覆盖它?

  22. 22

    在angular.js应用程序中全局进行错误处理的最佳方法是什么?

  23. 23

    Requirejs环境中Backbone.js ajax请求的全局错误处理程序

  24. 24

    模块化Sinatra应用程序,可全局设置错误处理和配置

  25. 25

    Angular JS将数据传递给$ http一个全局错误处理程序

  26. 26

    错误处理程序在discord.py上引发异常(类型错误)

  27. 27

    Scala:错误处理和异常匹配

  28. 28

    C程序中的错误处理程序

  29. 29

    VBA:错误处理程序中的错误

热门标签

归档