Pythonで例外を適切に扱うためのベストプラクティスについて説明します。例外処理は、頑健かつバグの発見をしやすいシステムを作るために重要な要素です。
例外処理の推奨行為
-
例外は適切に文書化する: 定義した例外がどういうものなのかを適切にドキュメント化しましょう。名前だけで伝わるような命名にする、
__str__
に詳細な説明を書く、もしくはSphinxなどのドキュメント自動生成ツールを使うのがオススメです。 -
ライブラリ共通の例外を作成し、全てそれを継承させる: これをすることで、そのライブラリが投げた全ての例外を簡単に受け取ることができます。
-
例外は適切なレイヤーで処理する: エラーを内部で握りつぶす処理は避けるべきです。IndexErrorなどの期待していない入力に基づくエラー関係はユーザーに委ねましょう。
-
Duck typingを活用する: 例外処理やValidationにはLBYL (Look Before You Leap)とEAFP (Easier to Ask for Forgiveness than Permission)という概念があり、要は前者は「石橋を叩いて渡る」方式で、後者は「当たって砕けろ」方式です。
例外処理の禁則行為
-
フローコントロールに利用: Goto的な感覚で利用するのは禁忌です。例えば、リストから該当する文字列を検索するプログラムを作る際、見つからなかった場合に例外を投げるのは誤りです。
-
内部実装が漏れる例外: カプセル化が保たれるように例外を設計しましょう。例えば、URLからHTMLを返すような実装をするときに、キャッシュのファイルが開けないときにIOErrorを投げるのは誤りです。
以上がPythonで例外を適切に扱うためのベストプラクティスです。これらのプラクティスを実践することで、より頑健でバグの発見が容易なコードを書くことができます。