除了在Python2.7中,为什么我不能使用()?

时间:2014-12-22 07:39:37

标签: python python-2.7 except raise

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

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");

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

1 个答案:

答案 0 :(得分:4)

A是一个班级。当你写A()时,你实际上实例化了类A

当您将类A的实例引发为异常时(i = A时), 没有except子句会在写入此A()

时捕获此实例

那么你看到了什么:__main__.A: <__main__.A instance at 0x00ACBE18>是已经引发的实例,没有人抓住它。

你实际上可以使用()。在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 here中阅读有关错误和异常的更多信息。