読者です 読者をやめる 読者になる 読者になる

例外ハンドラについて最近知ったこと

Python

except 節は一つまたはそれ以上の例外ハンドラを指定します。 try 節内で全く例外が起きなければ、どの例外ハンドラも実行されません。try スイート内で例外が発生すると、例外ハンドラの検索が開始されます。

http://www.python.jp/doc/release/ref/try.html

強調は引用者による。これの帰結は、例えば、

# -*- coding: utf-8 -*-

try:
    num = int("16")
except ValeuError:
    # 例のため、わざと"ValueError"であるべきものを
    # "ValeuError"とtypoしています
    pass

try:
    num = int("SPAM")
except ValeuError:
    # ここでtypoが判明
    pass

のようなコードを書いたときに、実際に例外が発生しないと単純なバグを検出できないということ。知らなかったなぁ。「こんなこと問題にならねーよ」と思われるかもしれないが、少なくとも僕は、この仕様に起因するバグを最近になって発見し修正した。ヘタレPythonプログラマでサーセンwww

教訓としては、上記のような単純なミスを発見するために、

  • テストコードのカバレッジ率100%を目指す
  • コードレビュー、ペア・プログラミングを活用する
  • 単純なtypoを指摘してくれるような親切・高機能なIDEを使う

とかなのかなぁ。