カネキン伊藤テック

Pythonの例外処理

基本的な形

try:
    # 例外を起こすかもしれないコード
    ...
except ExpectedException1 as var_name:
    ...
    raise  # キャッチした例外を再び挙げる
except ExpectedException2:
    # クラスを指定して例外をハンドリングするが例外を変数に入れない
    ...
except:
    # デフォルトの例外ハンドリング
    # 変数代入が必要なら Exception as var_name
    ...
else:
    # 例外が起きなかったときの処理(省略可能)
    ...
finally:
    # 例外が起きた場合でも, 起きなかった場合でも, 最後に実行される処理(省略可)
    ...

例外を送出

raise ValueError()

例外スタックトレースを文字列で得る

標準ライブラリ tracebackformat_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)

参考リンク