【Python】「そんな try:except文で大丈夫か?」「大丈夫だ、問題ない」

Pythonのtry:except文は強力だ。

使い方によって、処理が柔軟に行えるが、強力ゆえに
なにが行われているか分からなくなる場合がある。

try:except構文

try:
    try_clause
except ErrorName:
    error_cause
  1. try節(tryとexceptの間の文)が実行される。
  2. try節に例外がなければexcept節をスキップして、try文は終了
  3. try節に例外があれば、try節の途中でもスキップします。例外がexceptにしていされている
  4. キーワードに一致すると、except節が実行される。except節の実行後、try節の後の文に実行が戻る。
  5. 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


参考:Python チュートリアル

try文の位置の重要性

try文は結構、エラーがあってもどんどん処理を進めるので、慣れてきたらどこに配置するかが
重要になる。

プログラムの上層に大きく記載すると、プログラムの下層で少しぐらいエラーがあってもブルドーザーの如く処理が進む。

一方で細かいエラーが分かりにくくなる。

よくありがちなのはexceptを明示的に定義しないで、処理がとまることなく、ひたすら進むというもの。


俺の空手は後退のネジをはずしてあるんだよ」的な。すなわち愚地メソッド。



可能であればexceptの例外は、開発時に明示的にキャッチ&定義しておいて、
エラー処理が分かるようにしたい。