Python初心者向け:try-exceptで学ぶ例外処理の基本

目次
NOUMIN ENGINEERING TECH GUIDE

💬 くるるちゃんのワンポイント図解解説

【技術背景・解説】
この記事(Python初心者向け:try-exceptで学ぶ例外処理の基本)におけるIT技術の基本概念と重要ポイントを、わかりやすく整理・解説しています。

【アイキャッチ図解のポイント】
構成要素とデータフローを視覚的に整理し、初心者でも要点を掴みやすいグラフィック構造で表示しています。

【資格・要点ノート】
シラバス用語、基本概念の理解、実務への応用ポイント

はじめに

Pythonでプログラムを実行していると、ファイルが見つからない、数値に変換できない入力が来た、ネットワーク接続が切れたなど、想定外のエラーが起きてプログラム全体が停止してしまうことがあります。そんなときに使うのが例外処理(Exception Handling)です。

例外処理を使えば、エラーが発生しても適切に対処し、プログラムの実行を継続させることができます。この記事では、Pythonのtry-except構文を中心に、初心者が最低限押さえておくべき例外処理の基本を実践的なコード例とともに解説します。

例外(Exception)とは

Pythonにおける例外とは、プログラム実行中に発生するエラーのことです。例外が発生すると、通常はそこでプログラムが停止し、トレースバック(エラーメッセージ)が表示されます。

よく遭遇する例外には以下のようなものがあります:

例外名発生する場面具体例
ValueError不正な値が渡されたときint("abc")
TypeError型が合わないとき"text" + 123
ZeroDivisionErrorゼロ除算10 / 0
FileNotFoundErrorファイルが存在しないopen("存在しない.txt")
KeyError辞書に存在しないキーd = {}; d["key"]
IndexErrorリストの範囲外アクセスlst = [1]; lst[5]

try-except構文の基本

tryブロックにエラーが起こりうるコードを書き、exceptブロックでそのエラーを捕まえて処理します。これにより、エラーが発生してもプログラムを止めずに実行を続けられます。

try:
    result = 10 / 0
except ZeroDivisionError:
    print("0で割ることはできません")

print("プログラムは続行されます")
# 出力:
# 0で割ることはできません
# プログラムは続行されます

もしtry-exceptを使わなければ、ZeroDivisionErrorが発生した時点でプログラムが停止し、以降のコードは実行されません。

ユーザー入力を安全に扱う

例外処理が最も活躍する場面の一つが、ユーザーからの入力処理です。

try:
    num = int(input("数字を入力してください:"))
except ValueError:
    print("数値ではありません")
else:
    print(f"入力された数字は {num} です")
finally:
    print("入力処理が完了しました")

各ブロックの役割

  • try — エラーが発生する可能性のあるコードを記述
  • except — 指定した例外が発生したときの処理
  • else — 例外が発生しなかったときだけ実行される処理
  • finally — 例外の有無にかかわらず必ず実行される処理(リソース解放など)

複数の例外をまとめて処理する

1つのtryブロックで複数の種類のエラーに対応することもできます。

# 方法1: 複数の except ブロック
try:
    data = {"price": "abc"}
    value = int(data["price"])
except KeyError:
    print("キーが見つかりません")
except ValueError:
    print("数値に変換できません")

# 方法2: タプルでまとめる
try:
    value = int(data["price"])
except (KeyError, ValueError) as e:
    print(f"エラーが発生: {e}")

実践例:ファイル読み込み

ファイル操作は例外処理の典型的なユースケースです。ファイルが存在しない、権限がない、エンコーディングが違うなど、さまざまなエラーが起こり得ます。

def read_config(filepath):
    try:
        with open(filepath, "r", encoding="utf-8") as f:
            return f.read()
    except FileNotFoundError:
        print(f"設定ファイルが見つかりません: {filepath}")
        return None
    except PermissionError:
        print(f"ファイルへのアクセス権限がありません: {filepath}")
        return None
    except UnicodeDecodeError:
        print(f"ファイルのエンコーディングが不正です: {filepath}")
        return None

config = read_config("settings.json")
if config:
    print("設定を読み込みました")

実践例:API通信のエラーハンドリング

外部APIとの通信では、ネットワーク障害やタイムアウトなど予測不能なエラーが発生します。

import requests

def fetch_weather(city):
    try:
        response = requests.get(
            f"https://api.example.com/weather/{city}",
            timeout=5
        )
        response.raise_for_status()
        return response.json()
    except requests.exceptions.Timeout:
        print("リクエストがタイムアウトしました")
    except requests.exceptions.ConnectionError:
        print("サーバーに接続できませんでした")
    except requests.exceptions.HTTPError as e:
        print(f"HTTPエラー: {e.response.status_code}")
    return None

やってはいけないアンチパターン

例外処理にはいくつかの「やってはいけない」パターンがあります。初心者がよくやりがちなミスを紹介します。

1. 何でも捕まえる裸の except

# 悪い例: すべての例外を握りつぶす
try:
    do_something()
except:
    pass  # エラーを無視してしまう

# 良い例: 具体的な例外を指定する
try:
    do_something()
except ValueError as e:
    print(f"値が不正です: {e}")

裸のexceptexcept Exceptionでエラーを無視すると、バグの原因がわからなくなります。必ず具体的な例外クラスを指定しましょう。

2. 例外を使ったフロー制御

# 悪い例: 例外で分岐処理
try:
    value = my_dict[key]
except KeyError:
    value = default_value

# 良い例: 事前チェックや get() を使う
value = my_dict.get(key, default_value)

例外処理は本来「例外的な状況」への対応です。通常のフロー制御にはif文や安全なメソッドを使いましょう。

例外処理のベストプラクティス

  • 具体的な例外を捕まえるexcept Exceptionではなく、except ValueErrorのように具体的に
  • エラーメッセージを記録するas eでエラー内容を取得し、ログに残す
  • finally でリソースを解放する — ファイルやDB接続は確実に閉じる
  • 必要な範囲だけ try で囲む — try ブロックは最小限にし、どこでエラーが起きたかわかるようにする
  • with文を活用する — ファイルやDB接続にはコンテキストマネージャを使えば、finally不要で安全に扱える

まとめ

Pythonの例外処理は、エラーに強い安定したプログラムを書くための基本スキルです。ポイントをおさらいします:

  1. try-exceptでエラーを安全に捕まえ、プログラムの停止を防ぐ
  2. elseは正常時のみ、finallyは必ず実行される後処理に使う
  3. 複数の例外は個別のexceptかタプルで対応
  4. 裸のexceptやエラーの握りつぶしは絶対に避ける
  5. ファイル操作やAPI通信など、外部リソースとのやり取りでは特に重要

例外処理をマスターすれば、ユーザー入力・ファイル操作・API通信など、あらゆる場面でエラーに強いコードが書けるようになります。まずは今回のサンプルコードを手元で動かして、例外の挙動を体感してみてください。

読んだ内容を10問練習と実技で確認

記事で理解した用語を、StudyQuestの演習とクラウド実技ラボで定着させます。

10問練習 実技ラボ

コメント(0件)

まだコメントはありません。最初のコメントを投稿してください!

コメントを投稿