【发布时间】:2019-05-11 04:14:46
【问题描述】:
我的 Flask 应用中有一条简单的路线:
@app.route('/', methods=['GET'])
def homepage():
return '{}'.format(1 / 0)
当用户访问 site.com/ 时,她应该会看到 1/0 的结果。当然这是不可能的,所以 Python 会抛出一个错误。
现在,我希望以特殊方式处理所有端点上的所有错误:我希望它们返回 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
然后我将装饰器添加到端点:
@return_500_if_errors
@app.route('/', methods=['GET'])
def homepage():
return '{}'.format.(1 / 0)
但是,装饰器似乎没有效果。
【问题讨论】:
-
装饰器的顺序很重要
-
@YiFei 我试图颠倒顺序,同样的结果。
-
关心发布反码?我刚试过自己,你的装饰器没有问题。请注意 Joost 如何使用装饰器。 @app.route 必须是最外面的。
-
@YiFei 我感觉很糟糕,因为我确定我尝试过更改装饰器的顺序。然而,我今天又试了一次,你确实是对的——它有效。很抱歉提供误导性信息!
-
为什么不使用flask的错误处理器?
标签: python flask python-decorators endpoint