Python

【Python】第7章第8回:データ処理におけるエラーハンドリング

本記事では、Pythonにおけるエラーハンドリングの基本と実践例を解説します。安全で効率的なデータ処理を実現するためのスキルを身につけましょう。

0. 記事の概要

この記事を読むメリット

  • エラー回避スキルの向上:エラーハンドリングの仕組みと応用方法を学べます。
  • 安全なデータ処理:想定外のエラーが発生してもプログラムを安定して実行可能にします。
  • 実践力の向上:データ処理の各場面でのエラーを防ぐ手法を具体例で理解できます。

この記事で学べること

  • Pythonにおけるエラーハンドリングの基本構文
  • 実際のデータ処理場面での応用例
  • トラブルシューティングのスキル

1. エラーハンドリングの基本

1.1 try-except構文

# 基本的なエラーハンドリング
try:
    num = int(input("数字を入力してください: "))
    print(f"入力された数字: {num}")
except ValueError:
    print("エラー: 数字を入力してください。")

1.2 複数の例外を処理

# 複数の例外を処理
try:
    num = int(input("数字を入力してください: "))
    result = 10 / num
    print(f"結果: {result}")
except ValueError:
    print("エラー: 数字を入力してください。")
except ZeroDivisionError:
    print("エラー: 0で割ることはできません。")
動作解説
  1. try: 例外が発生する可能性のあるコードを記述。
  2. except: 発生した例外に応じたエラーメッセージを表示。
  3. 複数の例外処理: 異なる種類のエラーを個別に処理。

2. 実践例:ファイル操作時のエラーハンドリング

2.1 ファイル読み込み時のエラーハンドリング

# ファイル読み込み時のエラー処理
try:
    with open("example.txt", "r") as file:
        data = file.read()
        print(data)
except FileNotFoundError:
    print("エラー: ファイルが見つかりません。")
except IOError:
    print("エラー: ファイルの読み取り中に問題が発生しました。")

2.2 ファイル書き込み時のエラーハンドリング

# ファイル書き込み時のエラー処理
try:
    with open("output.txt", "w") as file:
        file.write("これはテストデータです。")
except IOError:
    print("エラー: ファイルの書き込み中に問題が発生しました。")
動作解説
  • ファイル読み込み中にFileNotFoundErrorを処理します。
  • 書き込み時のIOErrorに対処してデータ損失を防ぎます。

3. エラーハンドリングを応用したデータ処理

3.1 入力データのバリデーション

# 入力データのバリデーション
def get_positive_number():
    while True:
        try:
            num = int(input("正の整数を入力してください: "))
            if num <= 0:
                raise ValueError("正の整数である必要があります。")
            return num
        except ValueError as e:
            print(f"エラー: {e}")

number = get_positive_number()
print(f"入力された数値: {number}")
動作解説
  1. ValueErrorを発生させ、負の数やゼロの入力を防ぎます。
  2. 入力が有効になるまで繰り返し入力を要求します。

4. 練習問題

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

  1. 数値入力を求め、ZeroDivisionErrorを回避しながら割り算を行うプログラムを作成してください。
  2. 存在しないファイルを開こうとしてFileNotFoundErrorを処理するコードを書いてください。
  3. リストのインデックスを指定する際にIndexErrorを防ぐプログラムを作成してください。

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

問1〜3の解答例

# 問1: ZeroDivisionErrorを回避
try:
    num = int(input("分母を入力してください: "))
    result = 10 / num
    print(f"結果: {result}")
except ZeroDivisionError:
    print("エラー: 分母には0以外を入力してください。")

# 問2: FileNotFoundErrorを処理
try:
    with open("nonexistent.txt", "r") as file:
        print(file.read())
except FileNotFoundError:
    print("エラー: 指定されたファイルが存在しません。")

# 問3: IndexErrorを防ぐ
data = [10, 20, 30]
try:
    index = int(input("インデックスを入力してください: "))
    print(f"値: {data[index]}")
except IndexError:
    print("エラー: 無効なインデックスです。")

6. まとめ

本記事では、Pythonにおけるエラーハンドリングの基本構文と実践例を学びました。これらを活用して、安全で効率的なデータ処理を目指しましょう。