組み込み開発のためのPython · レッスン 203 / 220

例外を捕捉して失敗を伝える

具体的な例外を扱い、後片付けを保証し、失敗を成功に見せない方法を学びます。

外部機器との通信やファイル読込は、タイムアウト・権限不足・形式違いなどで失敗します。例外を適切な境界で扱い、失敗の理由を失わないようにします。

捕捉する例外を絞る

`except Exception`で広く捕捉して何もせず続けると、データ破損や通信失敗に気付けないことがあります。回復できる例外だけを捕捉し、回復できない場合は情報を保って上位へ伝えます。入力不備には`ValueError`、期限切れには`TimeoutError`のように、意味に沿った例外を使います。

後始末はfinallyやwithに任せる

例外が起きても通信ポートやファイルを閉じる必要があります。コンテキストマネージャーを持つ資源では`with`を使い、確実に解放します。独自の資源管理では`try/finally`で後片付けを保証し、エラー時にも安全な状態へ戻る手順を確認します。

コード例

手元のPython環境に貼り付ける前に、使用しているPythonの版と対象ライブラリの対応を確認してください。

from pathlib import Path

path = Path("settings.txt")
try:
    text = path.read_text(encoding="utf-8")
except FileNotFoundError as exc:
    raise RuntimeError(f"設定ファイルがありません: {path}") from exc

if not text.strip():
    raise ValueError("設定ファイルが空です")

手を動かす課題

存在しないファイルと空のファイルを別々に用意し、理由の異なるエラーとして扱ってください。

参考資料

「4. 関数・モジュール・例外」の章一覧へ