
【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プログラム作りに役立ててください。