0

一時例外クラスは、モジュールとして使用されることを意図した Python スクリプトで「タイプ」を使用して動的に定義されます。このクラスのインスタンスがスクリプトのインポートでキャッチされると、クラスを認識しません。以下はコードスニペットです

# the throwing module, defines dynamically
def bad_function():
    ExceptionClass = type( "FooBar", (Exception,),
        { "__init__": lambda self, msg: Exception.__init__(self, msg) })
    raise ExceptionClass("ExceptionClass")

使用コード

import libt0

try:
    libt0.bad_function()
#except libt0.FooBar as e:
#print e
except Exception as e:
    print e
    print e.__class__

libt0.FooBase がこのスクリプトに表示されない理由を説明できますか? 最後の行のオブザーバー出力。

4

2 に答える 2

2

関数内にクラスを作成したため、モジュールのグローバル名前空間に名前として存在しません。bad_function実際、実行中以外はまったく存在しません。これが失敗するのと同じ理由です。

# file1.py
def good_function():
   x = 2

# file2.py
import file1
print file1.x

あなたの例外クラスは、内部の単なるローカル変数ですbad_function

于 2013-06-18T07:07:35.397 に答える