flask踩坑记录:Flask-Restful在非调试模式下接管Flask的异常处理

在学习Flask-Restful写API的时候发现了一个奇怪的现象:

当pycharm运行flask时,debug模式和非debug模式下,相同的代码有不同的表现。

非debug模式:

故意抛出的自定义异常,竟然报出了HTTP错误。

debug模式:

在才是想要的报错。

查找资料之后发现,原来是Flask-Restful的问题。

非debug模式下,自定义异常被@api.representation统一处理了,没有经过@app.errorhandler,所以才会有两种模式下两种不同的结果。

处理办法是让api只处理HTTPExceptions和Flask-Restful自己定义的错误。

我们需要改写API的error_router方法:

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)


api = Api()

参考文章:

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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值