【本日のミッション】
Day56では「独自例外クラスの作成」を学びました。
今日は、実務でも非常に重要なテーマ「例外処理のベストプラクティス」について学びます。
単に try や except を使うだけでなく、「どう書けば安全で読みやすいか」を理解することが目的です。
目次
必要な範囲だけ try に含める
try 節の中には、例外が発生する可能性のある最小限のコードだけ を入れましょう。
広すぎる範囲を囲むと、意図しない例外までキャッチしてしまうことがあります。
出力結果
開始 0で割り算はできません 完了
-
try は「エラーの可能性がある最小範囲」に
-
可読性とデバッグのしやすさが向上する
except では具体的な例外を指定する
except: だけで書くと、すべての例外をキャッチしてしまい、
バグやプログラムエラーまで隠してしまうことがあります。
-
except:は原則使わない -
具体的な例外クラスを指定する
不要な例外の握りつぶしをしない
except 節の中を空にしたり、単に pass にすると、
エラーが起きたことがわからず、バグの原因を隠してしまうことになります。
出力結果
なにも起きない
最低でもログやメッセージを出力しましょう。
出力結果
エラーが発生しました: division by zero
else と finally を正しく使う
-
else:例外が発生しなかったときに実行
-
finally:例外が発生しても必ず実行(リソース解放などに使用)
出力結果
-
else → 正常処理の明示化
-
finally → ファイルや接続のクローズなどに使う
raise で再スローし、上位へ伝える
下位関数で例外をキャッチしても、上位の関数で最終処理を行いたい場合は、
raise で再スローします。
出力結果
独自例外クラスで意味を明確にする
アプリ固有のエラーは、独自例外クラスを作って表現するのがベストです。
出力結果
練習問題
次のコードを実行したとき、最も適切な出力を選びなさい。
選択肢
A)
0除算検出 終了処理
B)
終了処理 上位で補足
C)
0除算検出 終了処理 上位で補足
D)
終了処理のみ

解答
C)
0除算検出 終了処理 上位で補足
解説
-
exceptでメッセージを出力し、
raiseで再スロー -
finallyは必ず実行される
-
上位のtryで最終的に補足される
👉 正解は
C)
0除算検出 終了処理 上位で補足
✅ ポイント
-
try 節は必要最小限に
-
except は具体的な例外を指定する
-
pass で握りつぶさない(ログを出す)
-
else / finally を活用して明確な流れを
-
raise で再スローし、上位へ伝える
-
独自例外を使って意味のあるエラー設計を
次回予告
Day58では「例外とロギング(loggingモジュール)」を学びます。
実際の開発でよく使われる、例外ログの記録方法を理解しましょう。
参考
Python 3 エンジニア認定基礎試験 – Odyssey CBT
Python3 エンジニア認定基礎試験 出題範囲と学習プラン
Python3 エンジニア認定基礎試験 練習問題 Day1:変数の基本
Python3 エンジニア認定基礎試験 練習問題 Day2:変数の型(int型とstr型)
Python3 エンジニア認定基礎試験 練習問題 Day3:算術演算子と代入演算子
Python3 エンジニア認定基礎試験 練習問題 Day4:文字列の操作
Python3 エンジニア認定基礎試験 練習問題 Day5:比較演算子と論理演算子
Python3 エンジニア認定基礎試験 練習問題 Day6:if文(条件分岐)
Python3 エンジニア認定基礎試験 練習問題 Day7:ループ処理(for文・while文)
Python3 エンジニア認定基礎試験 練習問題 Day8:break文とcontinue文
Python3 エンジニア認定基礎試験 練習問題 Day9:リスト(list)の基本
Python3 エンジニア認定基礎試験 練習問題 Day10:リストの操作(append,remove,len など)
Python3 エンジニア認定基礎試験 練習問題 Day11:リストのスライス(部分取り出し)
Python3 エンジニア認定基礎試験 練習問題 Day12:タプル(tuple)の基本
Python3 エンジニア認定基礎試験 練習問題 Day13:辞書(dict)の基本
Python3 エンジニア認定基礎試験 練習問題 Day14:集合(set)の基本
Python3 エンジニア認定基礎試験 練習問題 Day15:関数の定義と呼び出し
Python3 エンジニア認定基礎試験 練習問題 Day16:関数のデフォルト引数とキーワード引数
Python3 エンジニア認定基礎試験 練習問題 Day17:可変長引数(*args, **kwargs)
Python3 エンジニア認定基礎試験 練習問題 Day18:関数のスコープ(ローカル変数とグローバル変数)
Python3 エンジニア認定基礎試験 練習問題 Day19:ネスト関数(関数の中の関数)
Python3 エンジニア認定基礎試験 練習問題 Day20:ラムダ式(無名関数)
Python3 エンジニア認定基礎試験 練習問題 Day21:組み込み関数(len, type, range など)
Python3 エンジニア認定基礎試験 練習問題 Day22:組み込み関数(sum,max,min,sorted)
Python3 エンジニア認定基礎試験 練習問題 Day23:文字列と組み込み関数(len,str,int,float)
Python3 エンジニア認定基礎試験 練習問題 Day24:組み込み関数(abs, round, pow)
Python3 エンジニア認定基礎試験 練習問題 Day25:組み込み関数(sorted の応用と key 引数)
Python3 エンジニア認定基礎試験 練習問題 Day26:組み込み関数(enumerate, zip)
Python3 エンジニア認定基礎試験 練習問題 Day27:組み込み関数(map, filter, reduce)
Python3 エンジニア認定基礎試験 練習問題 Day28:組み込み関数(any, all)
Python3 エンジニア認定基礎試験 練習問題 Day29:組み込み関数(isinstance,issubclass)
Python3 エンジニア認定基礎試験 練習問題 Day30:組み込み関数(callable, eval)
Python3 エンジニア認定基礎試験 練習問題 Day31:組み込み関数(dir, help)
Python3 エンジニア認定基礎試験 練習問題 Day32:組み込み関数(id, hash)
Python3 エンジニア認定基礎試験 練習問題 Day33:組み込み関数(repr, format)
Python3 エンジニア認定基礎試験 練習問題 Day34:組み込み関数(globals, locals)
Python3 エンジニア認定基礎試験 練習問題 Day35:組み込み関数(vars, callable)
Python3 エンジニア認定基礎試験 練習問題 Day36:組み込み関数(reversed, slice)
Python3 エンジニア認定基礎試験 練習問題 Day37:組み込み関数(getattr, setattr, hasattr, delattr)
Python3 エンジニア認定基礎試験 練習問題 Day38:組み込み関数(eval, exec, compile)
Python3 エンジニア認定基礎試験 練習問題 Day39:組み込み関数(zip の応用・辞書との組み合わせ)
Python3 エンジニア認定基礎試験 練習問題 Day40:モジュールの基本(import と from の違い)
Python3 エンジニア認定基礎試験 練習問題 Day41:as(別名インポート)と import の仕組み
Python3 エンジニア認定基礎試験 練習問題 Day42:標準ライブラリ(math モジュールの基本)
Python3 エンジニア認定基礎試験 練習問題 Day43:標準ライブラリ(random モジュールの活用)
Python3 エンジニア認定基礎試験 練習問題 Day44:標準ライブラリ(datetime モジュールの使い方)
Python3 エンジニア認定基礎試験 練習問題 Day45:標準ライブラリ(os と sys)
Python3 エンジニア認定基礎試験 練習問題 Day46:標準ライブラリ(pathlib とファイルパス操作)
Python3 エンジニア認定基礎試験 練習問題 Day47:パッケージ構造と __init__.py
Python3 エンジニア認定基礎試験 練習問題 Day48:自作モジュールの作成とインポート
Python3 エンジニア認定基礎試験 練習問題 Day49:例外処理の基本(try, except)
Python3 エンジニア認定基礎試験 練習問題 Day50:複数例外の処理と except as
Python3 エンジニア認定基礎試験 練習問題 Day51:else, finally の使い方
Python3 エンジニア認定基礎試験 練習問題 Day52:raise による例外発生