【6日でできるPython入門】例外

プログラムを実行していると、予期せぬ問題で「例外(エラー)」が発生することがあります。
Pythonでは、例外が起きてもプログラムの異常終了を防ぎ、柔軟にエラー処理を行う仕組みが用意されています
ここでは、例外の基本的な考え方から、例外を捕まえて適切に対処する方法まで、具体的なコード例を交えて学びます。
例外処理をしっかり理解すれば、プログラムの安定性やユーザビリティが大きく向上します。

1.例外とは何か

1.1. 例外発生のサンプル

ファイル名: lesson26-1.py

with open('data.txt', 'w', encoding='cp932') as f:
    f.write('あいうえお')

with open('data.txt', 'r', encoding='utf-8') as f:
    print(f.read())

実行結果(例外発生)

Traceback (most recent call last):
  File "c:\Users\joeac\Desktop\Python入門\lesson26-1.py", line 5, in <module>
    print(f.read())
          ^^^^^^^^
  File "<frozen codecs>", line 322, in decode
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x82 in position 0: invalid start bytee

解説

  • ファイルをcp932で書いたのにutf-8で読み込もうとし、デコードできず例外が発生
  • この例外はUnicodeDecodeErrorです。

2.例外を捕まえて処理を続ける

2.1. try-except文の基本

ファイル名: lesson26-2.py

try:
    with open('data.txt', 'r', encoding='utf-8') as f:
        print(f.read())
except UnicodeDecodeError:
    print('エンコーディングエラーが発生しました!')

実行結果

エンコーディングエラーが発生しました!

解説

  • tryブロック内で例外が起きると、exceptで捕まえて指定した処理を行います。
  • ここではUnicodeDecodeErrorのみを捕まえています。

2.2. 複数例外の処理

ファイル名: lesson26-3.py

try:
    with open('missing.txt', 'r', encoding='utf-8') as f:
        print(f.read())
except UnicodeDecodeError:
    print('エンコーディングエラーです。')
except FileNotFoundError:
    print('ファイルが見つかりません。')

実行結果(ファイル未作成時)

ファイルが見つかりません。

解説

  • ファイルが存在しない場合はFileNotFoundError例外が発生し、対応したexceptが動きます。
  • 複数例外の分岐が可能です。

3.finally と else の使い方

3.1. finallyブロック

ファイル名: lesson26-4.py

try:
    f = open('temp.txt', 'w', encoding='utf-8')
    f.write('テストデータ')
except Exception as e:
    print(f"エラー: {e}")
finally:
    f.close()
    print('ファイルを閉じました。')

実行結果

ファイルを閉じました。

解説

  • finally内の処理は例外の有無にかかわらず必ず実行されます。
  • ここではファイルを確実に閉じるために使います。

3.2. elseブロック

ファイル名: lesson26-5.py

try:
    with open('temp.txt', 'r', encoding='utf-8') as f:
        data = f.read()
except Exception as e:
    print(f"エラー: {e}")
else:
    print(f"読み込み成功: {data}")
finally:
    print("処理終了")

実行結果

読み込み成功: テストデータ
処理終了

解説

  • elseは例外が起きなかったときだけ実行されます。
  • 処理の流れがわかりやすくなります。

例外処理:まとめ表

キーワード説明ポイント
try例外が起こる可能性のある処理を書く例外発生時は即座にexceptへ
except発生した例外を捕まえて処理する特定の例外を指定可能
else例外がなければ実行される処理tryの中で問題なければここに入る。
finally必ず実行される処理リソース解放や後始末に使う。
Exceptionすべての例外の基本クラスexcept Exception:で広く捕まえられる。

例外処理を適切に書くことで、プログラムは予期せぬエラーを上手に回避し、安定して動作を続けることができます。
この章の内容を確実に理解し、堅牢なPythonプログラム作りに役立ててください。