Skip to content

9. 例外処理(try-except 文)

9.1 例外処理とは

プログラムを実行中に予期しないエラーが発生することがあります。これを例外と呼びます。例外処理は、プログラムがエラーで停止してしまうことを防ぎ、エラー発生時に特定の処理を行えるようにするための仕組みです。

Python では、try-except文を使って例外処理を行います。

9.2 try-except 文の基本構造

以下のような基本構造になっています。

try:
    # ここに例外が発生する可能性があるコード
    pass
except エラーの種類 as エラー変数:
    # 例外が発生したときの処理
    pass
  • tryブロック内に例外が発生する可能性のあるコードを記述します。
  • exceptで特定の例外を捕捉し、処理を記述します。

9.3 具体例

9.3.1 ゼロ除算の例外処理

例えば、ゼロ除算の際にはZeroDivisionErrorという例外が発生します。

try:
    result = 10 / 0
except ZeroDivisionError as e:
    print(f"エラーが発生しました: {e}")

上記のコードでは、10 を 0 で割るとZeroDivisionErrorが発生します。しかし、except部分でこの例外を捕捉し、エラー内容を表示します。

9.3.2 ファイル読み込みの例外処理

存在しないファイルを読み込もうとするとFileNotFoundErrorが発生します。

try:
    with open('nonexistent_file.txt', 'r') as f:
        content = f.read()
except FileNotFoundError as e:
    print(f"ファイルが見つかりません: {e}")

この例では、存在しないファイルを開こうとするためFileNotFoundErrorが発生しますが、except内でそのエラーを処理しています。

9.4 複数の例外を処理する

複数の例外をそれぞれ異なる方法で処理することもできます。

try:
    num = int("a")  # 文字列を整数に変換
    result = 10 / num
except ValueError as e:
    print(f"整数への変換に失敗しました: {e}")
except ZeroDivisionError as e:
    print(f"ゼロで割ろうとしました: {e}")

この例では、ValueErrorZeroDivisionErrorをそれぞれ異なる方法で処理します。

9.5 すべての例外を捕捉する

全ての例外を捕捉したい場合は、except Exceptionを使用しますが、具体的な例外を上で捕捉してから使用するのがベストプラクティスです。

try:
    # コードブロック
    result = 10 / int("a")
except Exception as e:
    print(f"予期しないエラーが発生しました: {e}")

9.6 finally ブロック

finallyブロックは例外の有無に関わらず、必ず実行されるコードを記述します。

try:
    result = 10 / 0
except ZeroDivisionError as e:
    print(f"エラー: {e}")
finally:
    print("この処理は必ず実行されます")

練習課題

実際に、異なる種類の例外を試してみてください。自分のコードの中で、どのようにtry-exceptを組み込めるか考えてみましょう。また、finallyブロックがどのように動作するかも試してみると理解が深まります。