目次

例外処理

Pythonは例外処理を非常に多用します。 関数への期待しない入力値の通知や、 ファイルがなかったり、通信が切れたりなど、 通常C/C++ではリターンコードでエラーを通知しそうな場面であっても Pythonでは例外処理を用いることもしばしばあります。

自分で例外クラスを作成するときは Exceptionクラスから派生したクラスにするとよいでしょう。

明らかに値間違いに対して送出するような例外であれば、 ValueErrorなどを継承するようにしています。

ノート

以前知人からユーザ定義例外は 組み込み例外クラスを継承するべきではないと指摘されたことがあります。 しかし私は、用途が明らで、かつ組み込み例外の動作を変更しないような用途であれば 組み込み例外は継承してもよいと考えています。

例えば値の間違いによるエラーなんだけど、 どのような種類の値に対するエラーなのかを示す場合、 適切な名前の例外クラスを定義してValueErrorを継承する方がよいと考えています。

そうするとクラス名から何の例外なのかを推測しやすくなるし 該当箇所が送出した例外なのか、 そうではないValueErrorなのか(近くにValueErrorが発生する可能性がある場合)の見分けが付くからです。

呼び出し側で処理する際に別々に処理したい場合は定義した例外を先に拾って 別々でexceptすればよいし 同じように拾って処理したい場合はValueErrorで拾えば両方とも拾えるからです。

Pygmentsなどサードパーティ製のライブラリの中にもこのような実装しているコードはあります。 これのどこがいけないのか、どこにいけないと書いてあるのか、はなはだ疑問です。

知人は “どんなプログラミング言語でも組み込み例外を継承すべきでない” と発言していました。 それが正しい考え方なのか、 Python でもそのまま適応できるのか、疑問です。

前のトピックへ

データ型

次のトピックへ

ワンライナー

このページ

inserted by FC2 system