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

class のインスタンスを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 に答える