我想捕获所有错误,并为我的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
。