例外の捕捉
たとえば、存在しないファイルを読み込もうとするとエラー(例外)が発生する。
import sys file = sys.argv[1] content = open(file, "r").read() size = len(content) print file + ": " + str(size)
^o^ > python exception1.py sample.dat Traceback (most recent call last): File "exception1.py", line 5, in content = open(file, "r").read() IOError: [Errno 2] No such file or directory: 'sample.dat'
上の例では sample.dat を読み込もうとしているが、存在しないファイルなので IOError が発生してプログラムが終了している。
ここでプログラムが終了しないようにするには、try ~ except 文を使って例外を適切に処理してやればいい。
import sys file = sys.argv[1] try: content = open(file, "r").read() size = len(content) print file + ": " + str(size) except IOError: print "Cannot open file: " + file
例外が発生するかもしれない処理をtry節に書き、発生した例外はexcept節で捕捉する。こうすると例外が発生したときの処理を書くことができる。この例では単純にメッセージを出力して終わっているだけだけど。
実行結果:
^o^ > python exception2.py sample.dat Cannot open file: sample.dat
except節の処理が実行されているのがわかる。
例外の発生
何らかの理由で例外を発生させたい場合には、raise 文を使う。一番単純な使い方としては 「raise メッセージ」とすればいい。
try: raise "Someting error." except: print "Error occured."
^o^ > python exception3.py Error occured.
この場合、発生する例外は StandardError みたい。特定の種類の例外を発生するには「raise 例外の種類(メッセージ)」という形式にする。