繁体   English   中英

Python一个异常多个处理程序

[英]Python one exception multiple handlers

我想做这个:

try:
    raise A()
except A:
    print 'A'
except (A, B):
    print 'A,B'

我希望可以同时打印AA,B

那是行不通的(仅执行第一个except )。 如果您想在子类的父类之前捕获该子类,那么except吞下错误except ,第一个是有意义的。

但是还有另一种优雅的方法可以使它起作用吗?

我当然可以做以下事情,但这似乎是多余的代码重复,尤其是如果涉及的不仅仅是AB

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()

将打印AAB

您可以使用嵌套的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM