Pythonの例外処理
Table of contents
基本的な形
try:
# 例外を起こすかもしれないコード
...
except ExpectedException1 as var_name:
...
raise # キャッチした例外を再び挙げる
except ExpectedException2:
# クラスを指定して例外をハンドリングするが例外を変数に入れない
...
except:
# デフォルトの例外ハンドリング
# 変数代入が必要なら Exception as var_name
...
else:
# 例外が起きなかったときの処理(省略可能)
...
finally:
# 例外が起きた場合でも, 起きなかった場合でも, 最後に実行される処理(省略可)
...
例外を送出
raise ValueError()
例外スタックトレースを文字列で得る
標準ライブラリ traceback の format_exc を利用
import traceback
try:
...
except:
exception_info_string = traceback.format_exc()
自前の例外クラスを定義
# 単に継承しただけの例外クラス
class MyError(Exception):
pass
raise MyError("ぶっこわれました!")
# パラメータを持つように
class NotPositiveError(Exception):
def __init__(self, number, message="正の数ではない"):
self.number = number
self.message = "%s: %s" % (message, number)
super(NotPositiveError, self).__init__(self.message)
raise NotPositiveError(-123)