我的Flask应用程序中有一条简单的路线:
@app.route('/', methods=['GET'])
def homepage():
return '{}'.format(1 / 0)
当用户访问site.com/时,她应该看到1/0的结果 . 当然这是不可能的,所以Python给我一个错误 .
现在,我希望以特殊方式处理所有 endpoints 上的所有错误:我希望它们返回JSON响应,例如:
{
'status_code': 500,
'status': 'Internal Server Error'
}
我写了一个装饰器来完成这个:
def return_500_if_errors(f):
def wrapper(*args, **kwargs):
try:
return f(*args, **kwargs)
except:
response = {
'status_code': 500,
'status': 'Internal Server Error'
}
return flask.jsonify(response), 500
return wrapper
然后我将装饰器添加到 endpoints :
@return_500_if_errors
@app.route('/', methods=['GET'])
def homepage():
return '{}'.format.(1 / 0)
但是,装饰器似乎没有任何效果 .
3 回答
这就是你需要的:
正如@YiFei和@Joost所指出的那样,问题在于装饰器的顺序 .
这确实有效:
@ Joost的答案是类似的,但不知何故不同,因为它是错误本身被捕获和返回 - 而不是标准化的JSON .
我强烈建议使用Flask的error handler已经存在的装饰器 .
基本上,应该看起来像:
只要确保要捕获的异常将具有'status_code'或者如果不是,则将'500'放入...