我在开发过程中使用了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 ......
答案 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_exception
和app.handle_exception
是一个糟糕的设计决定,原因有几个。