3 回答

TA贡献1765条经验 获得超5个赞
问题出在装饰器顺序上。
这确实有效:
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
@app.route('/', methods=['GET'])
@return_500_if_errors
def homepage():
return '{}'.format.(1 / 0)
但有些不同,因为要捕获和返回错误本身 - 而不是标准化的 JSON。

TA贡献1827条经验 获得超8个赞
这是你需要的:
from flask import Flask, jsonify
from functools import wraps
app = Flask(__name__)
def catch_custom_exception(func):
@wraps(func)
def decorated_function(*args, **kwargs):
try:
return func(*args, **kwargs)
except Exception as e:
return str(e), 500
return decorated_function
@app.route('/', methods=['GET'])
@catch_custom_exception
def homepage():
return '{}'.format(1 / 0)
@app.route('/2', methods=['GET'])
def homepage2():
return '{}'.format(1 / 0)
添加回答
举报