新手请教

新手请教

我在学习python的时候,有个问题看不懂
请各位高手指教。
class B:
    pass
class C(B):
    pass
class D(C):
    pass

for c in [B,C,D]:
    try:
        raise c()
    except D:
        print 'D'
    except C:
        print 'C'
    except B:
        print 'B'

输出
B
C
D

若写成
class B:
    pass
class C(B):
    pass
class D(C):
    pass

for c in [B,C,D]:
    try:
        raise c()
    except B:
        print 'B'
    except D:
        print 'D'
    except C:
        print 'C'

输出
B
B
B


请问这该怎么解释?
Python Manual里对try catch 语句执行的解释

QUOTE:
The try statement works as follows.


First, the try clause (the statement(s) between the try and except keywords) is executed.

If no exception occurs, the except clause is skipped and execution of the try statement is finished.

If an exception occurs during execution of the try clause, the rest of the clause is skipped. Then if its type matches the exception named after the except keyword, the except clause is executed, and then execution continues after the try statement.

If an exception occurs which does not match the exception named in the except clause, it is passed on to outer try statements; if no handler is found, it is an unhandled exception and execution stops with a message as shown above.

都输出B,我想是因为isinstance(C(),B)和isinstance(D(),B)都是True,所以第一个catch满足了就不再继续catch了。

哦,我明白了,谢谢你!