初めてのPython(28章)
前の章に引き続き例外について
例外の種類
大きく分けて2種類
- ビルドイン例外
- ユーザ定義例外
ビルドイン例外
あらかじめ定義されている例外(クラス)で階層構造になっている。
BaseException Exception StandardError ArithmeticError FloatingPointError ....
詳細は次のようにして、Pythonのdocstringから参照できる。
>>> import exceptions >>> help(exceptions)
ユーザ定義例外
ユーザ個々が自由に定義する例外で、Exceptionクラスを継承して作る。
Exceptionクラスを継承しているので、Exceptionをexceptに指定すれば例外を捕捉できる。
try: statement1 except Exception: statement2
ビルドイン例外はStandardExceptionのサブクラスとして定義されているので、
Exceptionをスーパークラスとして作成するユーザ定義例外と明示的に分けて例外処理が可能
try: statement1 except StandardError: # ビルドイン例外用の処理 statement2 except Exception: # ユーザ定義例外用の処理 statement3
可能とはいえ、Exceptionではなく、自分で定義した例外クラスのトップクラスを指定するのかな。
自分の作った例外以外を捕捉することは無いはずだけど、処理する範囲は出来るだけ狭めた方が良いはずだし。
また、クラスなので属性やメソッドを持たせることが出来る。
なので、例外が発生した時の処理をメソッドとしてクラスに実装することが出来る。
class MyException(Exception) def __init__(self, data): Exception.__init__(self) self.data = data def error_log(self): print >> sys.stderr, "Error:", data try: raise MyException('hogehoge') except MyException, error: errror.error_log()
raiseステートメント
クラス例外を発生させる方法は2種類
- raise instance
- raise class, instance
どちらの場合も、except