Python初心者が出会うエラー20選!【わかりやすく解説】

Python

こんにちは、Hiraです🌷
今回は、Pythonを勉強していて避けて通れない「エラー」についてのお話です。

コードを書いたらすぐ動くと思ってたのに、いきなりエラーが出てきてびっくり…
エラー文、英語だしなんだか正直読む気になれない時もありました。

大丈夫、安心して!エラー文は、Pythonが「ここおかしいよ」って教えてくれるメッセージなんだ。
怖がらずに見ていけば、だんだん意味がわかってくるよ!

エラーってなに?

エラーは、Pythonがコードを理解できなかった時に教えてくれる「ヒント」です。
しかも、そのエラーはだいたい決まった種類の中から出てきます

たとえばこんな感じ:

print("Hello

➡️ SyntaxError: EOL while scanning string literal
最初は意味が分からなくても、慣れると「カッコ閉じ忘れか!」「スペルミスかも」と、すぐ気づけるようになります。

初心者が最初に出会うエラー10選

まずは、Pythonの勉強を始めたばかりの方が最初に出会うエラーをご紹介します。

SyntaxError:文法ミス

print("Hello

「SyntaxError」って、パッと見だと“シンタックス”って何!?ってなる…

“Syntax”は「文法」って意味だよ。
カッコ閉じ忘れ、コロン忘れ、クォート忘れ…書き方のルール違反の時に出るんだ。

NameError:定義してない変数名

print(my_message)

➡️ NameError: name 'my_message' is not defined

変数名、ちゃんと書いたつもりでも typo(打ち間違い)してたパターンあるある…

TypeError:型が違う

print("合計:" + 100)

➡️ TypeError: can only concatenate str (not "int") to str

文字列と数値は、そのまま足せないよ!
"合計:" + str(100) って書いてね。

ValueError:値が不正

int("abc")

➡️ ValueError: invalid literal for int() with base 10: 'abc'

文字列を数値に変換しようとして怒られた…

数字に変換できない文字列を int() に渡すとこうなるよ!

IndexError:リストの範囲外

my_list = [1, 2, 3]
print(my_list[5])

➡️IndexError: list index out of range

リストの「存在しない番号」を呼び出そうとしたのが原因か…!

リストの要素数を超えたインデックスを指定するとこのエラーが出るよ。

KeyError:辞書にないキーを呼び出し

my_dict = {"name": "Hira"}
print(my_dict["age"])

➡️KeyError: 'age'

安全に取り出したいなら get() を使うといいよ。

IndentationError:インデント(空白)ミス

def greet():
print("Hello")

➡️IndentationError: expected an indented block

インデントつけ忘れてた!

Pythonはインデント(字下げ)が文法の一部。スペースとタブの混在にも注意!

AttributeError:属性が存在しない

num = 5
num.append(3)

➡️AttributeError: 'int' object has no attribute 'append'

append() はリストに使う関数だよ!

ZeroDivisionError:0で割った

x = 10 / 0

➡️ZeroDivisionError: division by zero

0で割るのはどの言語でもエラーになるから気をつけてね。

ModuleNotFoundError:モジュールが見つからない

import not_a_real_module

➡️ModuleNotFoundError: No module named 'not_a_real_module'

スペルミスや pip install 忘れがよくある原因だよ!

少し慣れたら出てくるエラー10選

続いては中級編!慣れた頃に出てくるエラーを紹介します。

ImportError:モジュール内の特定の要素が読み込めない

from math import not_a_function

➡️ImportError: cannot import name 'not_a_function' from 'math'

mathモジュールにない関数を読み込もうとしてた!

モジュール自体はあるけど、指定した関数が中にない時に出るよ。

FileNotFoundError:ファイルが存在しない

with open("nofile.txt") as f:
    data = f.read()

➡️FileNotFoundError: [Errno 2] No such file or directory: 'nofile.txt'

ファイルの名前、間違ってたか保存してなかったか…

ファイルパスや存在確認はしっかりチェックしよう!

IsADirectoryError:ディレクトリをファイルとして開こうとした

with open("/usr") as f:
    data = f.read()

➡️IsADirectoryError: [Errno 21] Is a directory: '/usr'

えっ、ディレクトリってファイルじゃないの!?

そう!フォルダとファイルは別物。open() はファイルに使おう。

PermissionError:権限がない

with open("/root/secret.txt") as f:
    data = f.read()

➡️PermissionError: [Errno 13] Permission denied: '/root/secret.txt'

システムの保護領域とか、書き込み禁止ファイルなどは注意だね。

UnboundLocalError:ローカル変数を使う前に参照した

def example():
    print(x)
    x = 5
example()

➡️UnboundLocalError: local variable 'x' referenced before assignment

上で使おうとしたけど、その前に代入してなかったのか…!

変数のスコープ(範囲)に注意して書くと防げるよ。

TypeError: object is not callable:関数っぽく書いたけど関数じゃなかった

➡️TypeError: 'int' object is not callable

数値やリストなど、関数じゃないものに () をつけるとこのエラーになるよ。

RecursionError:再帰が深すぎた

def loop():
    loop()
loop()

➡️RecursionError: maximum recursion depth exceeded

永遠にループしちゃった…!

再帰関数には「止める条件(終了条件)」を必ず入れよう!

StopIteration:イテレーターが終わったのに next() された

it = iter([1])
next(it)
next(it)

➡️StopIteration ※「何が悪かったのか」を説明してくれない非常にシンプルなエラー文です。

値がもうないのに next() しちゃってた!

for 文では自動で処理されるけど、next() を手動で使うときは注意だよ。

AssertionError:assert 条件が満たされなかった

assert 2 + 2 == 5

➡️AssertionError ※短いエラー文ですが、メッセージを自分でつければ詳しくできます。

強制チェックみたいなやつ…?

そう!assert は「この条件が絶対成り立つ」ことを確認するためのものだよ。

Exception:すべてのエラーの親

raise Exception("何かがおかしい")

➡️Exception: 何かがおかしい

ざっくりしたエラーなんだね!

その通り!独自エラーを作る時や、全部キャッチしたい時に使うことが多いよ。

このへんになると、何が起きたのかすら想像つかないことも…

大丈夫。ひとつひとつ読みながら試してみると、ちゃんと理解できるようになるよ。 エラー文=敵じゃなくて仲間!だと思ってね。

エラーを読めるようになるためのコツ

  • 行番号を見る(例:line 5
  • 「何Errorか」だけでもわかればググれる!
  • print()type() を使って、少しずつ状況を整理する

「type()で確認する」ってやってみたら、思ってた型と全然違ってて納得できた!

まとめ:エラーは怖くない、慣れれば味方!

  • 最初は誰でもつまずく
  • 読むのをめんどくさがらない
  • エラーが出る=自分でコードを書いている証拠!

積み重ねが一番の近道。焦らず、自分のペースで頑張りましょう!

ここまで読んでくださり、ありがとうございました🌷

タイトルとURLをコピーしました