【Python】「そんな try:except文で大丈夫か?」「大丈夫だ、問題ない」
Pythonのtry:except文は強力だ。
使い方によって、処理が柔軟に行えるが、強力ゆえに
なにが行われているか分からなくなる場合がある。
try:except構文
try: try_clause except ErrorName: error_cause
- try節(tryとexceptの間の文)が実行される。
- try節に例外がなければexcept節をスキップして、try文は終了
- try節に例外があれば、try節の途中でもスキップします。例外がexceptにしていされている
- キーワードに一致すると、except節が実行される。except節の実行後、try節の後の文に実行が戻る。
- except節で指定している例外の型と一致しない例外がtry節で起こると、try文の外側に例外がわたされる。例外指定がどこにもないと、プログラムの実行が停止。
except節の後は、再びtry節を継続するところがポイント!
例文
分かりやすい例文を載せてみる。
import sys try: f = open('myfile.txt') s = f.readline() i = int(s.strip()) except IOError, (errno, strerror): print "I/O error(%s): %s" % (errno, strerror) except ValueError: print "Could not convert data to an integer." except: print "Unexpected error:", sys.exc_info()[0] raise
try文の位置の重要性
try文は結構、エラーがあってもどんどん処理を進めるので、慣れてきたらどこに配置するかが
重要になる。
プログラムの上層に大きく記載すると、プログラムの下層で少しぐらいエラーがあってもブルドーザーの如く処理が進む。
一方で細かいエラーが分かりにくくなる。
よくありがちなのはexceptを明示的に定義しないで、処理がとまることなく、ひたすら進むというもの。
「俺の空手は後退のネジをはずしてあるんだよ」的な。すなわち愚地メソッド。
可能であればexceptの例外は、開発時に明示的にキャッチ&定義しておいて、
エラー処理が分かるようにしたい。