Pythonの代表的な例外一覧:よくあるエラーの原因と対処法まとめ

Pythonでプログラミングをしていると、様々な「例外(エラー)」に遭遇します。エラーメッセージは一見難しそうに見えますが、実は「何が間違っているか」を具体的に教えてくれる重要なヒントです。

例外の種類ごとの発生原因を知っておくことで、デバッグの速度は劇的に向上します。

この記事では、Python開発で頻繁に目にする代表的な例外と、その原因について解説します。

目次

代表的な例外一覧

1. AttributeError

オブジェクトが持っていない属性(変数)やメソッドを使おうとしたときに発生します。タイプミスや、変数の型を勘違いしている場合によく起こります。

# 数値型(int)には append メソッドは存在しない
number = 100

# エラー発生: 'int' object has no attribute 'append'
# number.append(5)

2. IndexError

リストやタプルなどのシーケンス型に対し、存在しないインデックス(範囲外の位置)を指定した場合に発生します。

# 要素が3つしかないリスト (インデックスは 0, 1, 2)
menu_items = ["Coffee", "Tea", "Water"]

# 存在しないインデックス 5 にアクセスしようとする
# エラー発生: list index out of range
# item = menu_items[5]

3. KeyError

辞書(dict)に対し、存在しないキーを指定してアクセスしようとした場合に発生します。

# ユーザー情報の辞書
user_data = {"id": 101, "name": "Tanaka"}

# 存在しないキー "email" を取得しようとする
# エラー発生: 'email'
# email = user_data["email"]

対処法としては、.get() メソッドを使うか、in 演算子で事前に存在確認を行うのが一般的です。

4. TypeError

演算や関数に対して、不適切な「型」のオブジェクトを渡した場合に発生します。例えば、数値と文字列を直接足し算しようとした場合などです。

price = 1000
tax_str = "0.1" # 文字列

# 数値と文字列は足せない
# エラー発生: unsupported operand type(s) for +: 'int' and 'str'
# total = price + tax_str

5. ValueError

型(クラス)自体は正しいものの、その「値」が不適切な場合に発生します。文字列を数値に変換する際、数字として解釈できない文字列を渡した場合などが典型的です。

# "123" は int に変換できるが、"hello" はできない
input_text = "hello"

# エラー発生: invalid literal for int() with base 10: 'hello'
# number = int(input_text)

6. ZeroDivisionError

数値を 0 で割ろうとした場合に発生します。数学的に定義できない計算です。

count = 0
total = 500

# 0除算
# エラー発生: division by zero
# average = total / count

例外の階層構造(継承関係)

Pythonのすべての例外はクラスとして定義されており、階層構造を持っています。

BaseException

すべての例外の基底(ルート)となるクラスです。通常のプログラムエラーだけでなく、システム終了 (SystemExit) やキーボード中断 (KeyboardInterrupt) なども含まれます。

Exception

通常のプログラムで発生する例外の基底クラスです。BaseException を継承していますが、システム終了などは含まれていません。

どちらを捕捉すべきか?

try-except 文で広範囲のエラーを捕捉したい場合、BaseException ではなく Exception を指定するべきです。

try:
    # 何らかの処理
    pass
except Exception as e:
    # 通常のエラーのみをキャッチする(推奨)
    print(f"エラー: {e}")

もし except BaseException: や単に except: と書いてしまうと、プログラムを強制終了させたい場合(Ctrl+C を押した場合など)のシグナルまで捕捉してしまい、プログラムが停止できなくなる恐れがあるためです。

まとめ

エラーが発生した際は、まず「例外の名前」を確認してください。

  • AttributeError: 属性やメソッドがない
  • IndexError: リストの範囲外
  • KeyError: 辞書のキーがない
  • TypeError: 型が合わない
  • ValueError: 値の形式がおかしい
  • ZeroDivisionError: 0で割っている

これらの意味を理解していれば、エラーメッセージを見た瞬間に修正箇所のアタリを付けることができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次