Flask-Restful在非调试模式下接受Flask的异常处理

时间:2016-03-18 05:15:57

标签: python flask flask-restful

我在开发过程中使用了Flask的异常处理(@app.errorhander(MyException)),即使对于来自Flask-Restful端点的异常也能正常工作。

但是,我注意到切换到debug=False时,Flask-Restful完全接管了异常处理(与propagate_exceptions False一样)。我喜欢Flask-Restful为所有未处理的异常发送内部服务器错误,但不幸的是,对于那些有Flask异常处理程序的人(当这些异常来自Flask-Restful端点时)也会发生这种情况。

有没有办法告诉Flask-Restful只处理Flask错误处理程序无法处理的异常?如果没有,我可以将某些异常类型排除在Flask-Restful处理之外,那么它们会被Flask处理吗?

我的最后一个选择是覆盖Flask-Restful的Api.handle_error并自己实现这个逻辑,但我想首先使用现有的API ......

1 个答案:

答案 0 :(得分:2)

简而言之,我的解决方案就是创建一个Api子类,修改它只处理HTTPException类型的异常。

from flask_restful import Api as _Api
from werkzeug.exceptions import HTTPException

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:
                return self.handle_error(e)
            except Exception:
                pass  # Fall through to original handler
        return original_handler(e)

那就是说,我认为首先覆盖app.handle_user_exceptionapp.handle_exception是一个糟糕的设计决定,原因有几个。