<p>跟进@新西兰迪兰杰的答案是,<a href="http://flask.pocoo.org/docs/1.0/patterns/apierrors/" rel="nofollow noreferrer">this vanilla-Flask error handling method</a>,和{a2},这是我决定的方法。{JSON{else>允许在指定的时候通过一个自定义的异常值来处理所有的异常。在</p>
<pre><code>from flask_restful import Resource, Api as _Api, HTTPException
app = Flask(__name__)
# This new Exception will accept a message, a status code, and a
# payload of other values to be displayed as a JSON object
class FlaskGenericException(Exception):
status_code = 500 # default unless overridden
def __init__(self, message, status_code=None, payload=None):
Exception.__init__(self)
self.message = message
if status_code is not None:
self.status_code = status_code
self.payload = payload
def to_dict(self):
rv = dict(self.payload or ())
rv['message'] = self.message
return rv
@app.errorhandler(FlaskGenericException)
def handle_flask_generic_error(error):
response = jsonify(error.to_dict())
response.status_code = error.status_code
return response
# This overridden Flask-RESTful API class will keep Flask-RESTful
# from handling errors other than HTTPException ones.
class Api(_Api):
def error_router(self, original_handler, e):
# Override original error_router to only handle HTTPExceptions.
if self._has_fr_route() and isinstance(e, HTTPException):
try:
# Use Flask-RESTful's error handling method
return self.handle_error(e)
except Exception:
# Fall through to original handler (i.e. Flask)
pass
return original_handler(e)
api = Api(app)
class TestMe(Resource):
def get(self):
try:
ldapc = ldap.connection
except:
# message = first parameter. Other parameters come in as "payload"
raise FlaskGenericException('A generic error', status_code=505, payload={'user': 'John Doe', 'company': 'Foobar Corp.'})
api.add_resource(TestMe, '/testme', endpoint='TestMe')
</code></pre>