Python

【Python】第6章第6回:ファイルの例外処理

本記事では、Pythonでファイル操作時に発生するエラーを適切に処理するための例外処理について解説します。安全かつ効率的なコードを書くための基礎を学びましょう。

0. 記事の概要

この記事を読むメリット

  • 例外処理の基礎を理解:ファイル操作時に発生するエラーを回避するスキルを学べます。
  • コードの安全性を向上:予期しないエラーへの対処法を習得できます。
  • 実践的な知識を習得:ファイル操作での例外処理を応用したプログラムを作成できます。

この記事で学べること

  • Pythonにおける例外処理の基本
  • ファイル操作時のよくあるエラーとその対処法
  • try-except構文を使った例外処理の実装例

1. ファイル操作でよくあるエラー

1.1 主なエラーの種類

  • FileNotFoundError: ファイルが見つからない場合に発生
  • PermissionError: 読み取り・書き込み権限がない場合に発生
  • IsADirectoryError: ファイルではなくディレクトリを操作しようとした場合に発生
  • UnicodeDecodeError: ファイルのエンコーディングが異なる場合に発生

1.2 エラーが発生する例

# ファイルが存在しない場合の例
with open("nonexistent.txt", "r") as file:
    content = file.read()

上記コードを実行すると、FileNotFoundErrorが発生します。

2. try-exceptを使った例外処理

2.1 基本構文

# try-except構文
try:
    処理内容
except エラータイプ:
    エラーが発生した場合の処理

2.2 ファイル操作での例

# 例外処理を使ったファイル操作
try:
    with open("nonexistent.txt", "r") as file:
        content = file.read()
except FileNotFoundError:
    print("ファイルが見つかりません。")
except PermissionError:
    print("ファイルへのアクセス権がありません。")
except Exception as e:
    print(f"予期しないエラーが発生しました: {e}")
動作解説
  1. tryブロックでエラーが発生する可能性のあるコードを記述します。
  2. exceptブロックで特定のエラーをキャッチし、対応する処理を行います。
  3. 全てのエラーをキャッチする場合は、except Exception as eを使用します。

3. 応用例:複数のエラー処理

3.1 複数ファイルを操作する場合

# 複数ファイル操作の例
try:
    with open("file1.txt", "r") as file1, open("file2.txt", "w") as file2:
        data = file1.read()
        file2.write(data)
except FileNotFoundError:
    print("どちらかのファイルが見つかりません。")
except PermissionError:
    print("ファイルにアクセスできません。")

4. 練習問題

以下の課題に挑戦してみましょう。

  1. 存在しないファイルを読み込むコードを書き、FileNotFoundErrorを適切に処理してください。
  2. 書き込み権限がないファイルへのアクセスでPermissionErrorを処理してください。
  3. 複数の例外を適切に処理するコードを書いてください。

5. 練習問題の解答と解説

問1〜3の解答例

# 問1: FileNotFoundErrorの処理
try:
    with open("nonexistent.txt", "r") as file:
        print(file.read())
except FileNotFoundError:
    print("ファイルが存在しません。")

# 問2: PermissionErrorの処理
try:
    with open("/protected/file.txt", "w") as file:
        file.write("データを書き込む")
except PermissionError:
    print("書き込み権限がありません。")

# 問3: 複数例外の処理
try:
    with open("file1.txt", "r") as file1, open("file2.txt", "w") as file2:
        file2.write(file1.read())
except FileNotFoundError:
    print("ファイルが見つかりません。")
except PermissionError:
    print("ファイルにアクセスできません。")
except Exception as e:
    print(f"予期しないエラーが発生しました: {e}")

6. まとめ

本記事では、Pythonでのファイル操作時に発生するエラーを例外処理を使って適切に対応する方法を学びました。安全で効率的なコード作成に役立ててください。