pythonのexcept文にExceptionを渡すと色々まとめて捕捉できる理由

pythonにはtry文なんてのがあります。

まあ、スクリプト言語の基本っぽいよねー。 ・・・ってのはどうでもよくて。

このtry文ってのは、

>>> try:
... 	raise SyntaxError('test')
... except SyntaxError as e:
... 	print 'cache:', e
cache: test

みたいな使い方だけでなく、

>>> try:
... 	raise SyntaxError('test')
... except Exception as e:
... 	print 'cache:', e
cache: test

なんて事ができる。 Exceptionって書くと、いろんな例外をまとめてキャッチできる。

何故か。という事に先ほど気づいたので、メモ。

pythonの組み込み例外はすべてBaseExceptionってやつから派生しています。 そして、原則としてBaseExceptionを継承したExceptionってのを継承して作られています。

で、だ。

except節に基底クラスを渡すと、派生クラスをまとめてキャッチするようになっているようです。

なので、except Exceptionってすると、大体の例外をキャッチしてくれる。 ちなみに、KeyboardInterruptBaseExceptionから直に派生しているようで、キャッチされないようになっています。

つまり、自作の例外でも基底クラスを渡せば派生クラスをまとめて捕捉できる! これは便利・・・かも、しれない?