提问者:小点点

如果视图函数返回无效响应,烧瓶errorhandler不会捕获错误


我想捕获所有错误并为我的api项目返回json格式的错误。

这是我的错误处理程序:

@app.errorhandler(Exception)
def handle_exception(e):
    if not isinstance(e, HTTPException):
        print(e)
        return {
            "code": 500,
            "name": "Internal Server Error",
            "description": repr(e),
        }, 500
    else:
        response = e.get_response()
        response.data = json.dumps({
            "code": e.code,
            "name": e.name,
            "description": e.description,
        })
        response.content_type = "application/json"
        return response

如果异常发生在视图函数内,我的错误处理程序会捕获异常:

@api.get("/")
def all(user):
    a.b
    return []

这成功地捕获了以下异常并返回一个json响应:

名称“a”未定义

但如果视图函数很好,但返回值不友好于json,则无法捕获:

@api.get("/")
def all(user):
    return 1

它引发以下错误并返回 html 格式的错误。

TypeError:视图函数没有返回有效的响应。返回类型必须是字符串、字典、列表、带标题或状态的元组、响应实例或WSGI callable,但它是int。


共1个答案

匿名用户

从文档中:

在调试模式下,不会使用“500内部服务器错误”的处理程序。相反,将显示交互式调试器。

关闭调试模式也会使处理程序处理<code>500 Internal Server Error</code>。