簡體   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