3 回答

TA貢獻1765條經(jīng)驗 獲得超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條經(jīng)驗 獲得超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)
添加回答
舉報