python如何在捕獲到一個異常后再次拋出異常
使用try ... except ... 可以捕獲到代碼中拋出的異常,在對異常進行處理后,有可能需要再次拋出這個異常,讓上一級調(diào)用者繼續(xù)處理,對于這樣的要求,該怎樣編寫代碼呢?
首先,在except語句塊中,應(yīng)當(dāng)使用sys.exc_info()的詳細(xì)信息,然后進行異常的處理,這里的處理完全是由你自己控制的,之后,根據(jù)要求,繼續(xù)拋出這個異常,因為上一級調(diào)用者可能有自己對異常處理的邏輯,如果你這里不拋出異常,它那里就不知道有異常發(fā)生。
sys.exc_info() 返回的是一個元組,元組中的第一個元素是異常的類型,第二個元素是異常對象,第三個元素是traceback,你可以使用raise 直接拋出第二個元素,考慮到python2 與 3的兼容性問題,你也可以使用six模塊的reraise函數(shù)拋出異常,示例代碼如下
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)評論
圖片
表情
