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

coolpython

共 823字,需浏览 2分钟

 ·

2021-03-06 09:29

使用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)


浏览 54
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报