【Python第9回】ファイルの読み書きと例外処理

Python基礎講座 全10回(第9回)

【Python第9回】ファイルの読み書きと例外処理

Pythonを使った実用的な処理への重要な一歩を踏み出します。パソコン内のテキストファイルを読み書きする仕組みと、プログラム中に予期せぬエラーが起きた際に安全に処理を逃がす「例外処理」を学びます。

📌 Python講座ロードマップ一覧(クリックで移動)

1. with 構文を使った安全なテキストファイルの操作

Pythonでテキストファイルを操作する(書き込む、または読み込む)場合は、`open()` 関数を使用します。

通常はファイルを「開く(open)」処理を行ったら、使い終わった後に必ず「閉じる(close)」処理を行わなければなりませんが、もし途中でエラーが発生するとクローズ処理がスキップされ、ファイルがロックされて壊れてしまう原因になります。

これを取り防ぐため、Pythonでは `with open() as 変数:` という構文を広く使います。この構文の内側にインデントして処理を書くことで、処理が正常終了しても、途中でエラーになっても、**自動的かつ確実にファイルを閉じてくれる**安全設計が保証されます。

2. エラーをキャッチしてクラッシュを防ぐ例外処理

プログラムを実行していると、「存在しないファイルを読み込もうとした」「ゼロで割り算を行ってしまった」など、構文上のミスではないが実行時に失敗してしまうエラーが発生します。これをプログラミング用語で **「例外(Exception)」** と呼びます。

例外が起きるとプログラムはその場で強制終了(クラッシュ)してしまいます。これを防ぐために、エラーが起きそうな領域を `try-except` 構文で包み、エラー時の迂回処理(エラーメッセージを出す等)を記述しておくことで、安全に動き続けさせることができます。

3. ファイルの書き込みと例外エラーをキャッチするコード

以下のコードは、ファイルへのテキスト書き込みと、ゼロ除算エラーを安全に回避するプログラムの例です。

file_exception.py
# 1. ファイルへの書き込み(with open as)
with open("sample.txt", "w", encoding="utf-8") as f:
    f.write("Pythonでファイルに書き込みました!\n")
# インデントを抜けた時点でファイルは自動クローズされています

# 2. 例外処理(try-except)
try:
    # エラーが起きそうな処理を書く
    result = 10 / 0  # ゼロ除算は通常エラーになる
    print(result)
except ZeroDivisionError:
    # 指定したエラー(ゼロ除算)が発生した時の迂回処理
    print("エラー:0で割ることはできません。")

💡 encoding=”utf-8″ の指定が必須

特にWindows環境などでファイルを扱う際、日本語の文字化けを防ぐために、`open()` 関数の引数に必ず **`encoding=”utf-8″`** を追加で記述して開くことを癖づけましょう。これがないと、日本語を含むファイルを扱った時に文字化けやエンコーディングエラー(UnicodeDecodeError)が多発します。

✍️ 第9回 理解度チェック(問題)

Pythonでファイルの操作完了後に自動クローズ処理を保証してくれる、また例外処理の終了時などでも役立つ、`open()`と組み合わせて使用する英小文字4文字のキーワード(構文)名は何でしょうか?

※この問題の解答と解説は、ページ最下部(まとめの前)に掲載しています。

5. まとめと次回予告

第9回の講義はお疲れ様でした!今回の重要ポイントを振り返りましょう。

  • `with open() as f:` を使うと、クローズ処理を自動で保証しつつ安全にファイルを開ける。
  • 文字化け防止のため、日本語のファイルを扱う時は `encoding=”utf-8″` を必ず追加する。
  • エラー発生時のクラッシュを避けるには、`try-except` で例外処理を適用する。

次回(第10回)は、本講座の集大成となる最終実践講義「実践!簡単な計算機アプリ作成」です。これまでに習得した知識を組み合わせ、コマンドラインで実際に動く電卓アプリを構築します。お楽しみに!

🔑 第9回 理解度チェックの解答と解説

【解説】

正解は **`with`** (または `with構文`)です。 `with open(“file.txt”, “r”) as f:` のように記述すると、ファイルハンドラの有効スコープがインデントブロック内部のみに厳密に縛られ、スコープを抜けた際に自動的かつ強制的に解放(f.close()が裏側で実行)されます。ファイル操作バグを撲滅するための現代の標準ルールです。