動的Exceptionクラス
id:jbkingさんとこで、
メタで例外クラスを作成してもraiseで怒られる
http://d.hatena.ne.jp/jbking/20061221/p1
ということで、2.4時点ではExceptionはクラシカルクラス、typeでメタクラス作るにはニュースタイルでないといけない。
type以外で作成するとなると、ローカルクラスを使えばいいかな。
def createException(name):
class LocalException (Exception):
pass
LocalException.__name__ = name
return LocalException
E1 = createException("E1")
E2 = createException("E2")
print E1, E2
print E1 == E2
出力結果
__main__.E1 __main__.E2 False
一応できるな。
キャッチできるか確認。
try:
raise E1()
except E2:
print "catch E2"
except E1:
print "catch E1"
出力
catch E1
おお、うまくいった。
まあ、2.5に移行すれば不要になる方法だが。