为了账号安全,请及时绑定邮箱和手机立即绑定

处理 Flask 路由中的所有异常

处理 Flask 路由中的所有异常

三国纷争 2021-09-11 20:39:27
我的 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)但是,装饰器似乎没有效果。
查看完整描述

3 回答

?
POPMUISE

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。


查看完整回答
反对 回复 2021-09-11
?
斯蒂芬大帝

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)


查看完整回答
反对 回复 2021-09-11
  • 3 回答
  • 0 关注
  • 205 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号