動的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に移行すれば不要になる方法だが。