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)

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案