0

我有以下代码 - 我在我不理解结果的行旁边发表了评论。

class A:
    pass;
class B(A):
    pass;
class C(B):
    pass;

for i in [A,B,C]:
    try:
        raise i();
    except C:
        print("C");
    except B:
        print("B");
    ### if i write A(), it shows: __main__.A: <__main__.A instance at 0x00ACBE18>
    except A:
        print("A");

这是我第一次使用该网站,所以如果有任何需要澄清的地方,请告诉我...

4

1 回答 1

4

A是一类。当您编写 A() 时,您实际上实例化了该类A

当您将类的实例A作为异常引发时(when i = A),当它像这样编写时,没有任何except子句会捕获该实例A()

所以你看到的是:__main__.A: <__main__.A instance at 0x00ACBE18>是已经被提升但没有人捕捉到它的实例。

您实际上可以使用()in. 在 C() 上尝试它。

class A: 
    pass
class B(A): 
    pass 
class C(B):
    pass

for i in [A,B,C]: 
    try: 
        raise i()
    except C(): 
        print("C")
    except B:
        print("B")
    except A:
        print("A")

将输出:

A
B
B

您可以在此处阅读有关 python 中的错误和异常的更多信息。

于 2014-12-22T07:52:33.163 回答