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

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

大丈夫、安心して!エラー文は、Pythonが「ここおかしいよ」って教えてくれるメッセージなんだ。
怖がらずに見ていけば、だんだん意味がわかってくるよ!
- エラーってなに?
- 初心者が最初に出会うエラー10選
- 少し慣れたら出てくるエラー10選
- ImportError:モジュール内の特定の要素が読み込めない
- FileNotFoundError:ファイルが存在しない
- IsADirectoryError:ディレクトリをファイルとして開こうとした
- PermissionError:権限がない
- UnboundLocalError:ローカル変数を使う前に参照した
- TypeError: object is not callable:関数っぽく書いたけど関数じゃなかった
- RecursionError:再帰が深すぎた
- StopIteration:イテレーターが終わったのに next() された
- AssertionError:assert 条件が満たされなかった
- Exception:すべてのエラーの親
- エラーを読めるようになるためのコツ
- まとめ:エラーは怖くない、慣れれば味方!
エラーってなに?
エラーは、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()で確認する」ってやってみたら、思ってた型と全然違ってて納得できた!
まとめ:エラーは怖くない、慣れれば味方!
- 最初は誰でもつまずく
- 読むのをめんどくさがらない
- エラーが出る=自分でコードを書いている証拠!
積み重ねが一番の近道。焦らず、自分のペースで頑張りましょう!
ここまで読んでくださり、ありがとうございました🌷