【问题标题】:Flask-Restful taking over exception handling from Flask during non debug modeFlask-Restful 在非调试模式下从 Flask 接管异常处理
【发布时间】:2016-07-04 18:02:03
【问题描述】:

我在开发过程中使用了 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...

【问题讨论】:

  • 您能分享一下您的解决方案吗?

标签: python flask flask-restful


【解决方案1】:

简而言之,我的解决方案是创建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 首先是一个糟糕的设计决策,原因有很多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    • 2020-10-09
    • 2017-04-30
    相关资源
    最近更新 更多