【Py】try-except块中的Flask abort会被截获从而导致response与预期不符

44 篇文章 0 订阅
10 篇文章 0 订阅

今天在撸代码的时候出现一个问题:有些abort能够正常返回指定的状态码以及描述(description),但有些就直接返回200,而且没有任何描述

这是由于你可能把abort包裹在try-except结构中了
如下所示:

def foo():
    abort(400, description={
        'success': False,
        'code': 4019,
        'message': '事务执行失败,回滚',
        'data': None
    })
    
try:
    foo()
except Exception as e:
    ...

这里的原因就是abort自身会raise werkzeug.exceptions.HTTPException异常,而这个异常没有被except Exception as e捕获,所以代码就继续往下执行了,如果后面没有代码了,flask就会只返回200
总而言之就是abort后并没有按照设想的一样直接返回response,而是被try-except截获了,且截获后并没有匹配到异常

解决办法就是不要在try中包含abort,而把abort交给except处理
如下所示

class ComboCheckError(Exception):
    ...
    
def foo():
    raise ComboCheckError({
              'success': False,
              'code': 4019,
              'message': '事务执行失败,回滚',
              'data': None
          })
    
try:
    foo()
except ComboCheckError as e:
    abort(400, description=e.args[0])

注意:e的类型为<class ‘main.ComboCheckError’>而非dict,而e.args[0]为dict

参考:https://stackoverflow.com/a/67494652/7151777

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值