Pythonエラー一覧と対処法|エラーメッセージの読み方から種類別の解決手順まで
エラーが出ると、それだけで手が止まってしまう——初学者がつまずく最大の原因はここです。しかしエラーメッセージは、Pythonが「どこで」「何が」おかしかったかを教えてくれている情報です。読み方さえ分かれば、ほとんどは自力で解決できます。
この記事では、まずメッセージの読み方を押さえ、そのうえでエラーを種類別に整理します。個別のエラーは関連記事に分けているので、出ているメッセージから辿ってください。
まずエラーメッセージの読み方
下から読む
エラーが出ると数行から数十行が表示されます。最も重要なのは最後の1〜2行です。ここにエラーの種類と説明が書かれています。
その上に並んでいるのはトレースバック(呼び出しの経路)で、「どこを通ってここに来たか」を示しています。原因の場所を探すときに使いますが、最初に見るべきは最終行です。
3つの情報を取り出す
- エラーの種類:最終行の先頭。
TypeError、NameErrorなど - 説明:種類のあとに続く文。何が問題かが書かれています
- 発生位置:トレースバックの最下部にあるファイル名と行番号
この3つをそのまま検索すれば、大半は解決します。ただし変数名など自分固有の部分は外して検索してください。
エラーは2種類ある
- 構文エラー(SyntaxError):実行される前に止まります。書き方の誤りです
- 実行時エラー(例外):途中まで動いてから止まります。処理の内容に問題があります
構文エラーは表示された行より手前に原因があることが多いのが特徴です。閉じ括弧の不足やコロンの抜けは、次の行で検出されます。
種類別:構文・書き方のエラー
実行される前に止まるものです。慣れれば数秒で直せます。
- unindent does not match any outer indentation level|インデントがずれています。タブと半角スペースの混在が典型です
- invalid syntax. Perhaps you forgot a comma?|カンマの抜けです
- invalid syntax. Maybe you meant ‘==’ or ‘:=’ instead of ‘=’?|比較のつもりで代入を書いています
- invalid character ‘(’ (U+FF08)|全角文字が紛れ込んでいます。日本語環境で頻出します
- invalid decimal literal|数値の書き方が不正です
- ‘return’ outside function|関数の外でreturnを使っています
- cannot access local variable ‘x’ where it is not associated with a value|関数内で代入前に使っています
インデントの考え方そのものはPythonインデント完全ガイドで扱っています。
種類別:型に関するエラー(TypeError)
「その型ではその操作はできません」という意味です。文字列と数値を足そうとした、といった場面で出ます。
- ‘str’ object cannot be interpreted as an integer
- ‘float’ object cannot be interpreted as an integer
- ‘NoneType’ object cannot be interpreted as an integer
- ‘X’ object is not subscriptable|角括弧で取り出せない型に対して使っています
- ‘NoneType’ object is not iterable|Noneをforで回そうとしています
- sort() takes no positional arguments|キーワード引数が必要です
NoneType系は「関数が何も返していない」ことが原因であることが大半です。returnの書き忘れを疑ってください。
種類別:属性・名前のエラー
- ‘NoneType’ object has no attribute|Noneに対してメソッドを呼んでいます
- ‘X’ object has no attribute ‘Y’|その型にそのメソッドはありません。typoか、型の勘違いです
種類別:添字・キーのエラー
- list assignment index out of range|存在しない位置に代入しています
- string index out of range|文字列の長さを超えて取り出しています
- LookupError|IndexErrorとKeyErrorの親にあたるエラーです
要素数はlen()で確認する習慣をつけると、この系統は大きく減ります。
種類別:インポートのエラー
- No module named ‘x’|インストールされていないか、仮想環境が違います
- cannot import name ‘X’ from ‘Y’|名前が存在しないか、バージョン違いです
- cannot import name ‘X’ from partially initialized module|循環インポートです
インポートの仕組みはPython相対インポートの使い方で扱っています。自分のファイル名を標準ライブラリと同じ名前にしないのも重要です(random.py を作ると標準のrandomが読めなくなります)。
種類別:数値・計算のエラー
- division by zero|0で割っています
- math domain error|sqrtに負の数を渡すなど、定義域の外です
- math range error|計算結果が扱える範囲を超えています
- OverflowError|値が大きすぎます
- ArithmeticError|上記の数値系エラーの親にあたります
種類別:ファイル・権限・文字コード
- No such file or directory|パスの誤りです。相対パスの基準位置を疑ってください
- Permission denied|権限が足りません
- ‘cp932’ codec can’t decode byte|Windowsの文字コード問題です
- ‘utf-8’ codec can’t decode byte|ファイルの文字コードが想定と違います
日本語を扱うと文字コードの問題は必ず通ります。ファイルを開くときに encoding を明示するだけで、大半は防げます。
種類別:実行環境・リソース
- MemoryError|メモリが足りません。一度に全部読み込んでいないか確認してください
- maximum recursion depth exceeded|再帰が止まっていません。終了条件を確認してください
- AssertionError|assertの条件が成立しませんでした
- ConnectionError|通信に失敗しています
再帰の考え方は再帰処理完全マスターガイドで扱っています。
エラーを減らす・早く直すために
1. printよりデバッガを使う
printを並べる方法は最初の一歩としては有効ですが、変数の中身を1か所ずつ確認するには効率が悪くなります。Pythonデバッグ方法入門で、VS Codeとpdbでのステップ実行を扱っています。
2. 例外を握りつぶさない
except: だけで何もせず通過させると、問題が起きていることに気づけなくなります。原因の特定が何倍も難しくなるため、学習段階では特に避けてください。
3. 検索の仕方を工夫する
エラーメッセージをそのまま検索するのが基本ですが、自分のファイル名や変数名は外してください。それらが含まれていると検索結果が出ません。
4. 30分で区切る
独学で最も時間を失うのが、詰まったまま止まっている時間です。学習時間の内訳は言語別の学習時間の目安で扱っていますが、ここが全体の半分以上を占めることもあります。30分で解決しなければ、いったん飛ばして先に進むという上限を決めてください。
よくある質問
エラーが出るのは自分の能力が低いからですか
違います。経験者も同じ頻度でエラーを出します。差があるのは出た後の対処速度だけです。エラーは失敗の証拠ではなく、Pythonからの情報提供だと捉えてください。
英語のメッセージが読めません
全部を訳す必要はありません。エラーの種類(TypeErrorなど)と、not、no、invalid、expected といった単語が拾えれば方向は分かります。よく出るものは10種類程度なので、すぐ慣れます。
エラーは出ないのに結果が違います
こちらのほうが厄介です。エラーが出ないということは、書き方は正しく、処理の組み立てが意図と違うということです。途中の値を確認しながら、どこで期待と食い違うかを探してください。
AIに聞いて解決してもいいですか
構いません。ただし提示された修正を、なぜそれで直るのか理解してから採用してください。理解せずに貼り付けると、同じエラーに何度も遭遇します。
独学だとエラーで止まってしまいます
独学で最も差が出る部分です。詰まったときに聞ける相手がいるかどうかで、学習時間が大きく変わります。判断の軸はプログラミング教室の選び方完全ガイド、独学で止まりやすいパターンはプログラミング独学で挫折する原因と対策にまとめています。
関連記事
- FileExistsErrorとは?原因・対処法をPython初心者向けに解説
- Pythonの「inconsistent use of tabs and spaces」の原因と解決方法
- 「Missing parentheses in call to ‘print’」の原因と対処法【Python】
- Pythonの「missing X required positional argument」エラーの原因と解決方法
- Pythonの「SyntaxError: incomplete input」の原因と対処法|入力が途中で終わっているときの解決方法
まとめ
エラーメッセージは下から読む。取り出すのは「種類」「説明」「発生位置」の3つ。これだけで対処の速度が変わります。
構文エラーは実行前、実行時エラーは実行中に起きます。前者は表示された行より手前を疑ってください。
そして、詰まる時間に上限を決めてください。エラーが出ること自体は問題ではありません。止まっている時間が長いことが、学習を遅らせます。
その他のエラー
ここで扱っていないエラーは個別の記事にまとめています。
- ConnectionRefusedError|相手がそのポートで待っていない(Errno 111・61・10061)
- ConnectionResetError|接続した後に切られた(Errno 104・54・10054)
- IsADirectoryError|フォルダをファイルとして開いた(Errno 21)
- NotADirectoryError|パスの途中にファイルがある(Errno 20)
- RuntimeWarning|止まらないが結果が怪しい警告
- ResourceWarning|ファイルの閉じ忘れ
- SyntaxWarning|Python 3.12から表示されるようになった警告
- ExceptionとBaseExceptionの違い|自作例外とraise from
- IndentationError: unexpected unindent|3.9で消えたメッセージ
- TypeError: unsupported operand type(s) for /: ‘str’ and ‘int’
- NameError: name ‘xxx’ is not defined の原因と解決方法|Python初心者向けにわかりやすく解説
- SyntaxError: ‘(‘ was never closed の原因と対処法|Pythonで「括弧が閉じていません」と表示されたときの直し方
- SyntaxError: invalid non-printable character U+3000の意味と直し方|原因は全角スペース【Python】
- SyntaxError: unexpected EOF while parsingの原因と対処法【Python】
- SyntaxError: unterminated string literalとは?原因・意味・直し方をPython初心者向けに解説
- TypeError: ‘int’ object is not callableの原因と解決方法|Python初心者向けにわかりやすく解説
- TypeError: ‘list’ object is not callableとは?原因と解決方法をPython初心者向けに解説
- TypeError: ‘str’ object is not callable|原因と対処法をわかりやすく解説【Python】
- ValueError: invalid literal for int() with base 10とは?原因・解決方法をPython初心者向けに解説







