如果view函数返回无效响应,flask错误处理程序将不会捕获错误



我想捕获所有错误,并为我的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:视图函数未返回有效响应。返回类型必须是字符串、dict、列表、具有标头或状态的元组、响应实例或可调用的WSGI,但它是int。

来自文档:

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

关闭调试模式会使处理程序也处理500 Internal Server Error

最新更新