Python 一个异常多个处理程序
Python one exception multiple handlers
我想这样做:
try:
raise A()
except A:
print 'A'
except (A, B):
print 'A,B'
我希望同时打印 A
和 A,B
。
那行不通(只执行第一个 except
)。第一个 except
吞下错误是有意义的,以防你想在它的父类之前捕获一个子类。
但是还有另一种优雅的方法可以让它发挥作用吗?
我当然可以执行以下操作,但这似乎是冗余代码重复,尤其是当涉及的不仅仅是 A
和 B
时:
try:
raise A()
except A:
print 'A'
print 'A,B'
except B:
print 'A,B'
(与 Multiple exception handlers for the same Exception 相关,但不重复。用法不同,我想知道如何以最少的代码重复来最好地处理它。)
捕获可能的异常并稍后从实例中获取异常类型是相当常见的:
try:
raise A()
except (A, B) as e:
if isinstance(e, A):
print('A')
print('A', 'B')
另一种选择是从另一个 class 继承一个,例如
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()
将打印 A B
和
try:
raise A()
except (A, B) as e:
e.do()
将打印 A
和 A B
。
您可以使用嵌套的 try-except-blocks:
try:
try:
raise A()
except A:
print 'A'
raise
except (A, B):
print 'A,B'
我想这样做:
try:
raise A()
except A:
print 'A'
except (A, B):
print 'A,B'
我希望同时打印 A
和 A,B
。
那行不通(只执行第一个 except
)。第一个 except
吞下错误是有意义的,以防你想在它的父类之前捕获一个子类。
但是还有另一种优雅的方法可以让它发挥作用吗?
我当然可以执行以下操作,但这似乎是冗余代码重复,尤其是当涉及的不仅仅是 A
和 B
时:
try:
raise A()
except A:
print 'A'
print 'A,B'
except B:
print 'A,B'
(与 Multiple exception handlers for the same Exception 相关,但不重复。用法不同,我想知道如何以最少的代码重复来最好地处理它。)
捕获可能的异常并稍后从实例中获取异常类型是相当常见的:
try:
raise A()
except (A, B) as e:
if isinstance(e, A):
print('A')
print('A', 'B')
另一种选择是从另一个 class 继承一个,例如
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()
将打印 A B
和
try:
raise A()
except (A, B) as e:
e.do()
将打印 A
和 A B
。
您可以使用嵌套的 try-except-blocks:
try:
try:
raise A()
except A:
print 'A'
raise
except (A, B):
print 'A,B'