[英]Python one exception multiple handlers
我想做這個:
try:
raise A()
except A:
print 'A'
except (A, B):
print 'A,B'
我希望可以同時打印A
和A,B
。
那是行不通的(僅執行第一個except
)。 如果您想在子類的父類之前捕獲該子類,那么except
吞下錯誤except
,第一個是有意義的。
但是還有另一種優雅的方法可以使它起作用嗎?
我當然可以做以下事情,但這似乎是多余的代碼重復,尤其是如果涉及的不僅僅是A
和B
:
try:
raise A()
except A:
print 'A'
print 'A,B'
except B:
print 'A,B'
(與具有相同異常但不是重復的多個異常處理程序有關 。用法不同,我想知道如何以最少的代碼重復來最好地處理它。)
稍后捕獲可能的異常並從實例中獲取異常類型是相當普遍的:
try:
raise A()
except (A, B) as e:
if isinstance(e, A):
print('A')
print('A', 'B')
另一種選擇是從另一個繼承一個類,例如
class B(Exception):
def do(self):
print('A', 'B')
class A(B, Exception):
def do(self):
print('A')
super().do()
然后
try:
raise B()
except (A, B) as e:
e.do()
將打印AB
,並且
try:
raise A()
except (A, B) as e:
e.do()
將打印A
和AB
。
您可以使用嵌套的try-except-blocks:
try:
try:
raise A()
except A:
print 'A'
raise
except (A, B):
print 'A,B'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.