Python は、プログラム実行中に発生するエラーを適切に処理するための例外処理機能を備えています。例外処理は、プログラムの安定性と信頼性を向上させるために不可欠です。この記事では、Python での例外処理の基本的な考え方、文法、実践的な使い方について解説します。
例外処理の基本: try と except
Python の例外処理は、try と except ブロックを使用して実装します。
tryブロック: エラーが発生する可能性のあるコードを記述します。exceptブロック:tryブロック内でエラーが発生した場合に実行されるコードを記述します。
基本的な構文は以下の通りです。
try: # エラーが発生する可能性のあるコード pass # 何らかの処理 except ExceptionType as e: # 例外発生時の処理 print(f"エラーが発生しました: {e}")
ExceptionTypeには、キャッチしたい例外の種類を指定します。as eの部分は省略可能です。エラーオブジェクトを変数eに格納し、エラーメッセージなどを参照できます。ExceptionTypeを省略すると、すべての例外をキャッチしますが、推奨されません。特定の例外を処理することが、より適切なエラーハンドリングに繋がります。
具体的な例外処理の例: ZeroDivisionError
数値をゼロで割ると ZeroDivisionError が発生します。ここでは 発生したZeroDivisionError をexcept ブロックでキャッチし、エラーメッセージを表示しています。
try: result = 10 / 0 # ゼロ除算 except ZeroDivisionError as e: print(f"エラー: {e}")
複数の例外の処理
複数の例外をまとめて処理するには、except ブロックで例外の種類をタプルで指定します。
例えば以下の、コードではint("abc")でValueErrorが発生し、10 / "5"でTypeError が発生する可能性があります。 except ブロックでこれらの例外をまとめて処理します。
try: # 例1: 文字列を整数に変換しようとする value = int("abc") # 例2: 整数を文字列で割ろうとする result = 10 / "5" except (ValueError, TypeError) as e: print(f"エラー: {e}")
else と finally ブロックの使用
elseブロック:tryブロックで例外が発生しなかった場合に実行されます。finallyブロック: 例外の有無に関わらず、最後に必ず実行されます。リソースの解放などに利用します。
以下の例では、ユーザーからの入力を整数に変換しようとします。入力が数字でない場合ValueErrorが発生します。
例外が発生しなければ、else ブロックで入力された数字します。finally ブロックは、例外の有無に関わらず、最後に必ず実行されます。
try: num = int(input("数字を入力してください: ")) except ValueError: print("エラー: 無効な入力です。") else: print(f"入力された数字は {num} です。") finally: print("処理を終了します。")
よく使われる組み込み例外
組み込み例外は、Python にあらかじめ定義されている例外クラスです。これらの例外は、プログラムの実行中に発生する可能性のある一般的なエラーを表します。 組み込み例外を使用することで、エラーの種類に応じた適切な処理を記述できます。よく使われる組み込み例外は以下の表の通りです。
| 例外 | 説明 |
|---|---|
Exception |
ほとんどの組み込み例外の基底クラス。 |
ZeroDivisionError |
ゼロで除算を行った場合に発生。 |
ValueError |
不適切な型の値を関数に渡した場合などに発生 (例: int("abc"))。 |
TypeError |
型が不適切な演算を行った場合に発生 (例: 10 / "5")。 |
FileNotFoundError |
ファイルが存在しない場合に発生。 |
IndexError |
リストなどのシーケンスで範囲外のインデックスにアクセスした場合に発生。 |
KeyError |
辞書に存在しないキーを指定した場合に発生。 |