python抛出异常 后如何接住_python如何在捕获到一个异常后再次抛出异常

python如何在捕获到一个异常后再次抛出异常

使用try ... except ... 可以捕获到代码中抛出的异常,在对异常进行处理后,有可能需要再次抛出这个异常,让上一级调用者继续处理,对于这样的要求,该怎样编写代码呢?

首先,在except语句块中,应当使用sys.exc_info()的详细信息,然后进行异常的处理,这里的处理完全是由你自己控制的,之后,根据要求,继续抛出这个异常,因为上一级调用者可能有自己对异常处理的逻辑,如果你这里不抛出异常,它那里就不知道有异常发生。

sys.exc_info() 返回的是一个元组,元组中的第一个元素是异常的类型,第二个元素是异常对象,第三个元素是traceback,你可以使用raise 直接抛出第二个元素,考虑到python2 与 3的兼容性问题,你也可以使用six模块的reraise函数抛出异常,示例代码如下

import sys

import six

def raise_exception():

raise ValueError(3)

def catch_exception():

try:

raise_exception()

except ValueError:

value = sys.exc_info()

# do something

six.reraise(*value) # 借助six模块抛异常

# raise value[1] # 自己抛异常

try:

catch_exception()

except:

value = sys.exc_info()

print(value)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值