@ api.errorhandler(Exception)

时间:2019-08-16 11:33:33

标签: flask flask-restplus

我有一个使用flask-restplus的非常简单的服务

from flask import make_response
from flask_restplus import Resource, Namespace, abort

api = Namespace('my-service')

# my_request and my_response omitted

@api.errorhandler(Exception)
def handle_error(error):
    return {
               'code': '0001',
               'description': 'internal error',
               'message': str(error)
           }, 500

@api.route('/my-resource')
class MyResource(Resource):

    @api.expect(my_request, validate=True)
    @api.marshal_with(my_response)
    def post(self):
        // Option 1
        return {
            'code': '0002',
            'description': 'not found',
            'message': 'report not found'
        }, 404
        // Option 2
        abort(make_response({
            'code': '0002',
            'description': 'not found',
            'message': 'report not found'
        }, 404))

问题是如果我使用Option 1,则响应由@api.marshal_with编组,因此响应正文为my_response

如果我使用Option 2,则abort()会抛出一个异常,该异常会被handle_error()捕获并变成500。

正确的做法是什么?

0 个答案:

没有答案