結論から言うと、tryexcept は「失敗する可能性がある処理」を安全に扱うための書き方です。

Pythonでは、存在しないファイルを開いたり、文字列を数値に変換したりするときにエラーが起きることがあります。
そのままにしておくとプログラム全体が止まりますが、tryexcept を使うと、エラー時の動きを自分で決められます。
この記事では、tryexcept の基本を、動くコードと一緒に整理します。

この記事でわかること

  • tryexcept の基本的な書き方
  • エラーが起きたときに処理を分ける考え方
  • 実務で例外処理を書くときの注意点

完成コード

完成コードは次の通りです。

from pathlib import Path


def read_amount(path: Path) -> int:
    try:
        text = path.read_text(encoding="utf-8")
        return int(text.strip())
    except FileNotFoundError:
        print(f"ファイルが見つかりません: {path}")
        return 0
    except ValueError:
        print(f"数値に変換できない内容です: {path}")
        return 0


sample_path = Path("sample_amount.txt")
sample_path.write_text("1200\n", encoding="utf-8")

amount = read_amount(sample_path)
print(f"読み込んだ金額: {amount}円")

missing_amount = read_amount(Path("missing_amount.txt"))
print(f"見つからない場合の金額: {missing_amount}円")

コードのポイント

このコードでは、テキストファイルから金額を読み込み、数値に変換しています。

  • try の中に、失敗する可能性がある処理を書いています
  • FileNotFoundError では、ファイルがない場合の処理を書いています
  • ValueError では、数値に変換できない場合の処理を書いています
  • エラー時は 0 を返し、呼び出し側の処理が続くようにしています

例外処理は、エラーをなかったことにするためのものではありません。
「失敗したときに、プログラムとしてどう振る舞うか」を決めるために使います。

コードを順番に説明します

主要な処理を分けて説明します。

1. 失敗する可能性がある処理を try に入れます

try:
    text = path.read_text(encoding="utf-8")
    return int(text.strip())

try の中には、エラーが起きる可能性がある処理を書きます。
この例では、ファイルの読み込みと、文字列から数値への変換を行っています。

ファイルが存在しなければ、読み込み時に FileNotFoundError が発生します。
ファイルの中身が "abc" のような文字列なら、int() のところで ValueError が発生します。

どちらも実務ではよく起きる失敗です。
入力ファイル、設定ファイル、CSVの値など、外から来るデータを扱うときは、失敗する可能性を前提にすると安全です。

2. ファイルがない場合を except で受け止めます

except FileNotFoundError:
    print(f"ファイルが見つかりません: {path}")
    return 0

except FileNotFoundError は、ファイルが見つからないエラーだけを受け止めます。
この例では、メッセージを表示して 0 を返しています。

ここで大切なのは、どのエラーを扱っているのかを具体的に書くことです。
ただ except: と書くと、想定していないエラーまで受け止めてしまい、原因に気づきにくくなります。

実務のコードでは、エラーの種類を具体的に書くほど、後から調査しやすくなります。

3. 数値に変換できない場合も分けて扱います

except ValueError:
    print(f"数値に変換できない内容です: {path}")
    return 0

ValueError は、値の形が処理に合わないときによく出る例外です。
ここでは、ファイルは読めたものの、中身を数値に変換できない場合に発生します。

ファイルがない場合と、ファイルの中身がおかしい場合では、原因も対応も違います。
そのため、except を分けると、エラーメッセージも具体的にできます。

エラー処理は、利用者や未来の自分に「何を直せばよいか」を伝える役割も持っています。

実務で使うときのポイント

実務で tryexcept を使うときは、まず「どこが失敗しそうか」を考えると書きやすくなります。

  • ファイルを開く処理は、ファイルが存在しない可能性があります
  • 文字列を数値に変換する処理は、値の形式が違う可能性があります
  • APIや外部サービスを呼ぶ処理は、通信に失敗する可能性があります
  • ユーザー入力を扱う処理は、想定外の値が入る可能性があります

一方で、何でも try に入れればよいわけではありません。
範囲が広すぎると、どの行で失敗したのか追いにくくなります。

基本は、失敗する可能性がある処理だけを小さく try に入れます。
そのうえで、想定できる例外を except FileNotFoundErrorexcept ValueError のように具体的に書くと、保守しやすいコードになります。

第4章では、このあと 4-2 でよく出る例外の読み分け方、4-3finally の使いどころを扱います。
tryexcept の形を先に押さえておくと、エラーメッセージを落ち着いて読めるようになります。

よくある勘違い・注意点

  • try はエラーを消すための書き方ではありません。失敗時の動きを決めるために使います
  • except: だけを書くと、想定外のエラーまで隠れてしまうことがあります
  • try の範囲を広げすぎると、どの処理で失敗したのか分かりにくくなります
  • エラー時に何も表示しないと、問題が起きたときに調査しにくくなります

まとめ

  • try には、失敗する可能性がある処理を書きます
  • except には、エラーが起きたときの処理を書きます
  • 例外の種類を具体的に書くと、原因を追いやすくなります
  • 例外処理は、実務で止まりにくいツールを作るための基本です