Pythonでよく出るエラー一覧|初心者向けに原因と解決方法を徹底解説

Pythonを学習していると、SyntaxError、NameError、TypeErrorなど、さまざまなエラーに遭遇します。
エラーメッセージを見ると難しそうに感じますが、Pythonのエラーは原因を特定するための重要なヒントです。
本記事では、Python初心者が特に遭遇しやすい「よく出るエラー」を一覧にして、原因・具体例・解決方法をわかりやすく解説します。
Pythonでよく出るエラー一覧
まず、Pythonで頻繁に遭遇するエラーを一覧で確認しましょう。
| エラー | 主な原因 |
|---|---|
SyntaxError |
Pythonの文法が間違っている |
IndentationError |
インデントが間違っている |
NameError |
定義されていない名前を使用している |
TypeError |
データ型や引数の使い方が不適切 |
ValueError |
値の形式や内容が不適切 |
IndexError |
リストなどの範囲外のインデックスを指定 |
KeyError |
辞書に存在しないキーを指定 |
AttributeError |
オブジェクトに存在しない属性・メソッドを指定 |
ZeroDivisionError |
0で割っている |
FileNotFoundError |
指定したファイルが存在しない |
ModuleNotFoundError |
モジュールが見つからない |
ImportError |
モジュールや機能のインポートに失敗 |
UnboundLocalError |
ローカル変数が適切に定義されていない |
RecursionError |
再帰処理が深くなりすぎた |
ここから、それぞれ詳しく解説します。
1. SyntaxError
SyntaxErrorとは?
SyntaxErrorは、Pythonの文法(構文)が間違っている場合に発生するエラーです。
Pythonを始めたばかりの人が非常によく遭遇するエラーの一つです。
例えば、次のコードを実行します。
print("Hello"
print()の閉じ括弧がありません。
この場合、
SyntaxError: '(' was never closed
のようなエラーが表示されます。
よくある原因
-
()の閉じ忘れ -
[]の閉じ忘れ -
""や''の閉じ忘れ -
:の付け忘れ -
Pythonの文法に存在しない書き方をしている
解決方法
エラーメッセージが示している行付近を確認しましょう。
特に、
if x > 10
のように:を忘れていないか確認することが重要です。
正しくは、
if x > 10:
print(x)
です。
2. IndentationError
IndentationErrorとは?
IndentationErrorは、インデント(字下げ)が正しくない場合に発生するエラーです。
Pythonではインデントがプログラムの構造を表します。
例えば、
if x > 10:
print(x)
では、print()のインデントがありません。
正しくは、
if x > 10:
print(x)
とします。
よくある原因
-
インデントの付け忘れ
-
インデントの位置がずれている
-
スペースとタブが混在している
Pythonでは一般的にスペース4つでインデントします。
3. NameError
NameErrorとは?
NameErrorは、定義されていない変数や関数などを使用した場合に発生します。
例えば、
print(name)
と書いたものの、nameを定義していなければ、
NameError: name 'name' is not defined
となります。
解決方法
変数を使用する前に定義します。
name = "Taro"
print(name)
また、変数名のスペルミスにも注意しましょう。
username = "Taro"
print(usernmae)
この場合もNameErrorになります。
4. TypeError
TypeErrorとは?
TypeErrorは、データ型や関数の引数などの使い方が適切ではない場合に発生します。
例えば、
age = 20
print("年齢:" + age)
これは文字列と整数を+で連結しているため、エラーになります。
TypeError: can only concatenate str (not "int") to str
解決方法
str()を使って文字列に変換します。
age = 20
print("年齢:" + str(age))
または、f文字列を使う方法もあります。
print(f"年齢:{age}")
Pythonでは、異なるデータ型を組み合わせるときにTypeErrorが発生することがよくあります。
5. ValueError
ValueErrorとは?
ValueErrorは、データ型としては正しいものの、値の内容が適切ではない場合に発生します。
代表例が文字列を整数に変換するケースです。
number = int("abc")
"abc"は文字列なのでint()に渡せますが、整数として解釈できません。
そのため、
ValueError: invalid literal for int()
となります。
解決方法
整数に変換できる文字列を指定します。
number = int("123")
print(number)
6. IndexError
IndexErrorとは?
IndexErrorは、リストなどで存在しないインデックスを指定した場合に発生します。
例えば、
numbers = [10, 20, 30]
print(numbers[3])
リストのインデックスは、
0 → 10
1 → 20
2 → 30
です。
3は存在しないため、
IndexError: list index out of range
となります。
解決方法
リストの要素数を確認しましょう。
numbers = [10, 20, 30]
print(numbers[2])
また、len()を使って要素数を確認する方法もあります。
print(len(numbers))
7. KeyError
KeyErrorとは?
KeyErrorは、辞書(dict)に存在しないキーを指定した場合に発生します。
例えば、
user = {
"name": "Taro",
"age": 20
}
print(user["address"])
addressというキーは存在しないため、
KeyError: 'address'
となります。
解決方法
キーが存在するか確認します。
print(user["name"])
または、get()を使用する方法があります。
print(user.get("address"))
get()を使うと、存在しないキーでも基本的にKeyErrorを避けられます。
8. AttributeError
AttributeErrorとは?
AttributeErrorは、オブジェクトに存在しない属性やメソッドを呼び出した場合に発生します。
例えば、
name = "Python"
name.append("!")
文字列にはappend()というメソッドがないため、
AttributeError: 'str' object has no attribute 'append'
となります。
append()はリストなどで利用します。
languages = ["Python"]
languages.append("Ruby")
print(languages)
9. ZeroDivisionError
ZeroDivisionErrorとは?
ZeroDivisionErrorは、0で割ろうとした場合に発生します。
result = 10 / 0
すると、
ZeroDivisionError: division by zero
となります。
解決方法
0で割らないように条件分岐を入れます。
number = 0
if number != 0:
result = 10 / number
else:
print("0では割れません")
10. FileNotFoundError
FileNotFoundErrorとは?
FileNotFoundErrorは、指定したファイルが見つからない場合に発生します。
例えば、
with open("data.txt") as f:
data = f.read()
実行した場所にdata.txtが存在しなければエラーになります。
主な原因
-
ファイル名が間違っている
-
ファイルの場所が違う
-
相対パスの指定が間違っている
-
ファイルが削除されている
ファイルのパスを確認しましょう。
11. ModuleNotFoundError
ModuleNotFoundErrorとは?
ModuleNotFoundErrorは、指定したPythonモジュールが見つからない場合に発生します。
例えば、
import pandas
を実行して、
ModuleNotFoundError: No module named 'pandas'
と表示された場合、現在使用しているPython環境にpandasがインストールされていない可能性があります。
解決方法
pipを使ってインストールします。
pip install pandas
環境によっては、
python -m pip install pandas
または、
python3 -m pip install pandas
を使用します。
12. ImportError
ImportErrorとは?
ImportErrorは、モジュールのインポートに失敗した場合などに発生します。
例えば、
from math import hello
mathモジュールにhelloという機能が存在しなければ、ImportErrorになります。
ModuleNotFoundErrorとの違い
簡単に整理すると、
-
ModuleNotFoundError→ モジュールそのものが見つからない -
ImportError→ モジュールは見つかったが、指定したものを読み込めない
という違いがあります。
13. UnboundLocalError
UnboundLocalErrorとは?
UnboundLocalErrorは、関数内のローカル変数を、値が設定される前に参照した場合などに発生します。
例えば、
def test():
print(x)
x = 10
test()
この場合、xに値を代入する前に参照しています。
解決方法
変数を先に定義します。
def test():
x = 10
print(x)
test()
14. RecursionError
RecursionErrorとは?
RecursionErrorは、再帰処理が深くなりすぎた場合などに発生します。
例えば、
def test():
test()
test()
test()が自分自身を永遠に呼び出しています。
その結果、
RecursionError: maximum recursion depth exceeded
となります。
解決方法
再帰処理には必ず終了条件を設定します。
def countdown(n):
if n <= 0:
return
print(n)
countdown(n - 1)
countdown(5)
Pythonのエラーを解決する基本手順
エラーが発生したときに、いきなりコードを修正するのではなく、次の順番で確認すると効率的です。
1. エラーの種類を確認する
まず、エラーの最後に表示される部分を確認します。
例えば、
TypeError
ならデータ型や引数の問題、
NameError
なら変数名や関数名の問題である可能性が高いと判断できます。
2. エラーが発生した行を確認する
例えば、
File "sample.py", line 10
と表示されていたら、10行目付近を確認します。
ただし、表示された行が必ずしも根本原因とは限りません。
その前の行で変数に間違った値を入れているケースもあります。
3. エラーメッセージを読む
Pythonのエラーメッセージには、原因を特定するための情報が含まれています。
例えば、
NameError: name 'usernmae' is not defined
なら、
usernmae
という名前が定義されていないことがわかります。
実は、
username
のスペルミスだった、というケースも考えられます。
4. type()でデータ型を確認する
TypeErrorなどで困った場合は、type()が非常に便利です。
x = 100
print(type(x))
実行すると、
<class 'int'>
と表示されます。
文字列なら、
<class 'str'>
リストなら、
<class 'list'>
となります。
「この変数は何型なのか?」を確認することは、Pythonのエラー解決で非常に重要です。
Python初心者が特に覚えておきたい5つのエラー
すべてのエラーを最初から覚える必要はありません。
まずは次の5つを覚えておくとよいでしょう。
1位:TypeError
TypeError
データ型や関数の使い方に問題があるケース。
2位:NameError
NameError
変数名・関数名などが定義されていないケース。
3位:SyntaxError
SyntaxError
Pythonの文法が間違っているケース。
4位:IndexError
IndexError
リストなどの範囲外を指定しているケース。
5位:KeyError
KeyError
辞書に存在しないキーを指定しているケース。
この5つを理解するだけでも、Pythonのエラー対応力はかなり向上します。
Pythonのエラーは怖くない
Python初心者の場合、赤い文字で大量のエラーメッセージが表示されると「プログラムが壊れた」と感じるかもしれません。
しかし、エラーは必ずしも悪いものではありません。
むしろ、
「ここを確認してください」
とPythonが教えてくれている情報です。
例えば、
NameError
なら変数名を確認する。
IndexError
ならリストの範囲を確認する。
KeyError
なら辞書のキーを確認する。
TypeError
ならデータ型を確認する。
というように、エラーの種類から原因を絞り込むことができます。
Pythonのエラーを解決する力を身につけよう
Pythonを実務で使うなら、エラーを完全になくすことよりも、エラーが発生したときに原因を調べて解決できる能力が重要です。
特に、
-
エラーの種類を確認する
-
エラーが発生した行を確認する
-
エラーメッセージを読む
-
print()で値を確認する -
type()でデータ型を確認する -
コードを小さく分けて原因を特定する
という習慣を身につけると、エラー対応がかなり楽になります。
まとめ|Pythonのよく出るエラーを覚えておこう
Pythonでは、プログラムを書いているとさまざまなエラーが発生します。
特に初心者が遭遇しやすいのは以下のエラーです。
| エラー | 覚えておきたいポイント |
|---|---|
SyntaxError |
文法が間違っている |
IndentationError |
インデントが間違っている |
NameError |
名前が定義されていない |
TypeError |
型や引数の使い方が不適切 |
ValueError |
値が適切ではない |
IndexError |
インデックスが範囲外 |
KeyError |
辞書のキーが存在しない |
AttributeError |
属性・メソッドが存在しない |
ZeroDivisionError |
0で割っている |
FileNotFoundError |
ファイルが見つからない |
ModuleNotFoundError |
モジュールが見つからない |
ImportError |
インポートに失敗している |
UnboundLocalError |
ローカル変数を適切に参照できていない |
RecursionError |
再帰処理が深くなりすぎている |
Pythonのエラーは、原因を教えてくれる重要な情報です。
エラーが出たら慌てずに、まず「エラーの種類」「発生した行」「エラーメッセージ」の3つを確認しましょう。これだけでも、エラー解決への第一歩になります。
他のPythonエラーの原因と対処法はPythonエラー一覧と対処法に種類別でまとめています。エラーメッセージの読み方もあわせて解説しています。
エラー別の詳しい解説
この一覧で概要をつかんだら、実際に出ているメッセージで詳しい解説を探してください。
| エラー | 詳しい解説 |
|---|---|
| SyntaxError | SyntaxError / SyntaxWarning(3.12から表示) |
| IndentationError | IndentationError / unexpected indent / expected an indented block |
| TypeError | TypeError / unsupported operand(+) / 同(/) |
| ZeroDivisionError | ZeroDivisionError(バージョン別メッセージ表あり) |
| ファイル・フォルダ系 | FileNotFoundError / IsADirectoryError / NotADirectoryError |
| 接続系 | ConnectionRefusedError / ConnectionResetError / TimeoutError |
| 警告(止まらない) | RuntimeWarning / ResourceWarning |
| 例外の設計 | ExceptionとBaseExceptionの違い / 例外処理のベストプラクティス |



