Pythonを学び始めたとき、エラーメッセージが理解できずに挫折してしまう初心者は少なくありません。実際、僕自身も最初に学習したときにエラーが原因で一度やめてしまった経験があります。
そこで本記事では、Pythonでよくあるエラーの原因と対処法を、初心者向けにわかりやすく解説します。SyntaxErrorやTypeErrorといった代表的なエラー8種類を、具体的なコード例とともに紹介しますので、エラーが出るたびにこの記事を参照してもらえれば嬉しいです。
エラーの対処法を身につけることで、Pythonの学習をスムーズに進められるようになります。ぜひ最後まで読んでみてください。
Pythonのエラーメッセージの読み方・特定方法
エラーはプログラミングにおいて日常茶飯事です。大切なのは、エラーメッセージを正しく読み解く力を身につけることです。
Pythonでエラーが発生すると、ターミナルやコンソールに「トレースバック(Traceback)」と呼ばれる出力が表示されます。これを見ると気が重くなることもありますが、まずは最終行に注目してください。
例えば、以下のような出力が表示された場合:
Traceback (most recent call last):
File "sample.py", line 3, in <module>
print(value)
NameError: name 'value' is not defined
最終行の NameError: name 'value' is not defined がエラーの本体です。多くの場合、この最終行のエラー名と説明文を手がかりに原因を探ると解決できます。
ただし、TypeError や IndexError の場合は最終行ではなく途中の行番号に原因があることも多いため、エラー名に応じてトレースバック全体を確認するようにしましょう。
Pythonでよくあるエラー一覧
以下が本記事で解説するPythonのよくあるエラーの一覧です。Python3エンジニア認定基礎試験などの検定対策にも役立つ基礎知識ですので、まずは概要を把握しておきましょう。
| エラー名 | 概要 |
|---|---|
| SyntaxError | 構文(文法)が間違っている |
| NameError | 未定義の変数を使用している |
| TypeError | 型の不一致・型に関する問題 |
| IndexError | リスト等の範囲外インデックスへのアクセス |
| KeyError | 辞書に存在しないキーへのアクセス |
| ValueError | 型は正しいが値が不正 |
| AttributeError | 存在しない属性やメソッドへのアクセス |
| ImportError | モジュールのインポート失敗 |
次に、各エラーの原因・コード例・対処法を詳しく見ていきましょう。
各エラーの原因と対処法【コード例付き】
1. SyntaxError(構文エラー)
SyntaxError は、Pythonのコードの文法が間違っているときに発生します。初心者が最も多く遭遇するエラーです。
主な原因
- コロン
:の付け忘れ(if・for・defなど) - クォートや括弧の閉じ忘れ
- 全角スペースの混入
# NG例1: 閉じ括弧の忘れ
print("Hello, world"
# NG例2: コロンの付け忘れ
def hello()
print('test')
対処法
VS CodeなどのエディターはリアルタイムでSyntaxErrorを赤い波線で教えてくれます。エディターの警告を見逃さず、コロンや括弧の対応を確認しましょう。
# OK例1: 括弧を閉じる
print("Hello, world")
# OK例2: コロンを追加
def hello():
print('test')
2. NameError(未定義の変数エラー)
NameError は、定義されていない変数を使おうとしたときに発生します。変数名のタイプミスが原因であることも多いです。
主な原因
- 変数を定義する前に使用している
- 変数名のスペルミス(例:
valeuと書いてしまう)
# NG例: value が未定義
print(value)
対処法
変数を使う前に必ず定義してください。エラーメッセージに表示されている変数名をコード内で検索し、定義箇所を確認しましょう。
# OK例: 先に変数を定義する
value = 10
print(value)
3. TypeError(型エラー)
TypeError は、データの「型(Type)」に関するエラーです。異なる型同士で演算しようとしたときや、関数に渡す引数の型が間違っているときに発生します。
主な原因
- 文字列(str)と数値(int)を
+で連結しようとした - 関数の引数に想定外の型を渡した
# NG例: 文字列と数値の直接連結
print("Age: " + 25)
対処法
str() や int() を使って型を明示的に変換(型変換)する方法が一般的です。
# OK例: str() で数値を文字列に変換
print("Age: " + str(25))
# OK例2: f文字列(f-string)を使う方法(より簡潔)
age = 25
print(f"Age: {age}")
4. IndexError(インデックスエラー)
IndexError は、リストやタプルの範囲外のインデックスにアクセスしようとしたときに発生します。Pythonのインデックスは0始まりであることを忘れると起きやすいエラーです。
主な原因
- リストの要素数を超えたインデックスを指定した
- インデックスが0始まりであることを忘れて1始まりで書いてしまった
# NG例: 要素数3のリストに対してインデックス5を指定
numbers = [1, 2, 3]
print(numbers[5])
対処法
アクセス前に len() でリストの長さを確認するか、try/except を使って例外処理を行いましょう。
# OK例1: if文で範囲チェック
if len(numbers) > 5:
print(numbers[5])
else:
print("Index out of range")
# OK例2: try/except で例外処理
try:
print(numbers[5])
except IndexError:
print("指定したインデックスは存在しません")
5. KeyError(キーエラー)
KeyError は、辞書型(dict)で存在しないキーにアクセスしようとしたときに発生します。
主な原因
- 辞書に登録されていないキーを指定した
- キー名のスペルミス
# NG例: 'age' キーが存在しない
data = {"name": "Alice"}
print(data["age"])
対処法
get() メソッドを使うと、キーが存在しない場合にデフォルト値を返せるため安全です。
# OK例1: get() でデフォルト値を指定
print(data.get("age", "Key not found"))
# OK例2: in 演算子でキーの存在確認
if "age" in data:
print(data["age"])
else:
print("age キーは存在しません")
6. ValueError(値エラー)
ValueError は、型は正しいけれど値が不正な場合に発生します。たとえば、数値に変換できない文字列を int() に渡した場合などです。
主な原因
- 数値に変換できない文字列を
int()やfloat()に渡した list.remove()に存在しない値を指定した
# NG例: "abc" は数値に変換できない
num = int("abc")
対処法
# OK例: try/except で ValueError をキャッチ
try:
num = int("abc")
except ValueError:
print("数値に変換できない文字列です")
7. AttributeError(属性エラー)
AttributeError は、オブジェクトに存在しない属性やメソッドを呼び出そうとしたときに発生します。
主な原因
- メソッド名のタイプミス
- 型が想定と異なる(例: リストに文字列のメソッドを呼んでしまう)
# NG例: リストに upper() は存在しない
my_list = [1, 2, 3]
my_list.upper()
対処法
エラーメッセージで「どのオブジェクトの、どのメソッドが存在しないか」を確認し、正しいメソッド名や型を使っているかを見直しましょう。dir(オブジェクト) で使用可能なメソッド一覧を確認できます。
# OK例: 文字列に対して upper() を使う
my_str = "hello"
print(my_str.upper()) # => HELLO
# 使用可能なメソッドを確認
print(dir(my_str))
8. ImportError(インポートエラー)
ImportError(および ModuleNotFoundError)は、存在しないモジュールをインポートしようとしたときに発生します。
主な原因
- モジュール名のタイプミス
- 必要なライブラリがインストールされていない
# NG例: 'numpy' がインストールされていない
import numpy
対処法
# ターミナルでpipインストールを実行
# pip install numpy
# OK例: インストール後にインポート
import numpy as np
print(np.__version__)
また、仮想環境(venv)を使っている場合は、仮想環境が有効化されているかも確認してください。
Pythonエラーを効率よく解決するためのコツ
エラーへの対処に慣れてきたら、以下のコツを意識するとさらにデバッグが速くなります。
- エラーメッセージをそのまま検索する:「Python NameError name is not defined」のようにエラー名+メッセージで検索すると、公式ドキュメントやStack Overflowで解決策が見つかります
- print()デバッグを活用する:エラーが起きている箇所の前後に
print(変数名)を挿入して値を確認する方法は、初心者でも即実践できます - コードを少しずつ実行する:一度に大量のコードを書くのではなく、10〜20行ごとに動作確認することでエラーの範囲を絞り込みやすくなります
- 公式ドキュメントを参照する:Python公式ドキュメント(日本語版)には各エラーの詳細説明があり、信頼性の高い情報源です
まとめ:Pythonのエラーは「慣れ」で解決できる
本記事では、Pythonでよくあるエラー8種類の原因と対処法をコード例とともに解説しました。
- SyntaxError:文法ミス・記号の付け忘れ
- NameError:未定義変数・タイプミス
- TypeError:型の不一致
- IndexError:リストの範囲外アクセス
- KeyError:辞書の存在しないキー
- ValueError:型は正しいが値が不正
- AttributeError:存在しないメソッド・属性
- ImportError:モジュールのインポート失敗
エラーは「失敗」ではなく、Pythonがあなたに「ここがおかしいよ」と教えてくれているサインです。最初は怖く感じるかもしれませんが、慣れてくればエラーメッセージを見るだけで原因の見当がつくようになります。
引き続きPythonの学習を進めるなら、ぜひ以下の記事もあわせてご覧ください。
エラーを恐れず、一つひとつ乗り越えながらPythonをマスターしていきましょう!
📚 関連記事
- Pythonの例外処理を初心者向けに解説— エラー処理の実装方法を詳しく解説
- 【ざっくり解説】「関数」と「メソッド」の違いって?— AttributeErrorの原因となるメソッド理解に有効
- Python初心者のためのリストの基礎と実用例3問— IndexError対策のリスト操作の基礎を習得
- Python初心者のための辞書(dict型)の基礎と実用例3問— KeyError対策の辞書操作の基礎を習得





