読み込み中...
プログラミングを始めたばかりの頃、一番怖いものは何でしょうか?
多くの初心者が口を揃えて言うのが、「エラーメッセージ」 です。
画面に突然表示される赤い文字。何行にもわたる英語の羅列。見たこともない専門用語。
「うわ、壊れた...」「何かやっちゃった...」と焦ってしまう気持ちは、とてもよくわかります。
でも、安心してください。この記事を読み終える頃には、エラーメッセージが怖いものから頼れる味方に変わっているはずです。
エラーメッセージは、プログラムが「ここがおかしいよ」「こうすれば直るよ」と教えてくれる、親切なガイドなのです。読み方さえわかれば、プログラミングの上達スピードは格段に上がります。
エラーメッセージが怖い理由は、主に3つあります。
ターミナルやエディタでは、エラーメッセージは赤い文字で表示されることが多いです。赤は「危険」「警告」を連想させるので、それだけで身構えてしまいます。
しかし、赤いのは単に「ここに注目してほしい」 という意味です。信号の赤のように「止まれ」ではなく、「ここを見て」というサインだと思ってください。
日本語で「名前が定義されていません」と言われれば理解できるのに、NameError: name 'x' is not defined と言われると途端にわからなくなります。
でも実は、エラーメッセージに使われる英語はパターンが決まっています。 10個ほどのエラー名を覚えれば、ほとんどの場面で対応できます。
エラーが発生すると、数行~数十行の「トレースバック」が表示されます。情報量が多いので「全部読まなきゃいけないの?」と圧倒されてしまいます。
実は、最初に読むべき場所は決まっています。 全部を読む必要はありません。ポイントだけ押さえれば大丈夫です。
ここで、とても大切な考え方をお伝えします。
エラーメッセージは、プログラムからの「助けの手紙」です。
エラーが出ない方が怖いのです。なぜなら、エラーが出ないのにプログラムが期待通りに動かない場合、原因を探すのは非常に大変だからです。
エラーメッセージは以下の情報を教えてくれます:
これらの情報があるからこそ、問題を素早く見つけて修正できるのです。
プロのプログラマーも毎日エラーに遭遇しています。違いは、エラーを怖がるか、活用するかだけです。
それでは、Pythonのエラーメッセージの構造を見ていきましょう。
以下のコードを実行したとします:
1# main.py
2def greet(name):
3 message = "こんにちは、" + name + "さん!"
4 print(message)
5
6greet(123)すると、こんなエラーメッセージが表示されます:
1Traceback (most recent call last):
2 File "main.py", line 5, in <module>
3 greet(123)
4 File "main.py", line 2, in greet
5 message = "こんにちは、" + name + "さん!"
6TypeError: can only concatenate str (not "int") to strエラーメッセージは、大きく3つのパートで構成されています。
パート1:ヘッダー
1Traceback (most recent call last):これは「エラーの経路情報がここから始まりますよ」という合図です。毎回同じ文言なので、読み飛ばしてOKです。
パート2:トレースバック(経路情報)
1 File "main.py", line 5, in <module>
2 greet(123)
3 File "main.py", line 2, in greet
4 message = "こんにちは、" + name + "さん!"プログラムがどの順番で実行され、どこでエラーが起きたかを示しています。
File "main.py", line 5 → main.pyファイルの5行目greet(123) → その行で実行されたコードFile "main.py", line 2 → さらにmain.pyの2行目に進みmessage = "こんにちは、" + name + "さん!" → この行で問題が発生パート3:エラー本体(一番重要)
1TypeError: can only concatenate str (not "int") to strTypeError → エラーの種類(「型のエラー」)can only concatenate str (not "int") to str → 具体的な説明(「文字列には文字列しか連結できません。intはダメです」)Pythonのエラーメッセージを読むときの鉄則は、一番下から読む ことです。
1Traceback (most recent call last): ← 3番目に読む(必要なら)
2 File "main.py", line 5, in <module> ← 3番目に読む(必要なら)
3 greet(123) ← 3番目に読む(必要なら)
4 File "main.py", line 2, in greet ← 2番目に読む
5 message = "こんにちは、" + name + "さん!" ← 2番目に読む
6TypeError: can only concatenate str (not "int") to str ← 1番目に読む!ステップ1: 最終行でエラーの種類と原因を把握する
ステップ2: そのすぐ上の行で、どのファイルの何行目かを確認する
ステップ3: 必要に応じて、さらに上をたどって呼び出し元を確認する
この順番で読めば、ほとんどのエラーは理解できます。
ここからは、Python初心者が最も遭遇しやすい10個のエラーを紹介します。それぞれ、実際のコード例・エラーメッセージ・原因・修正方法をセットで解説します。
意味: Pythonの文法ルールに違反している。
よくある原因: カッコの閉じ忘れ、コロンの付け忘れ、全角スペースの混入など。
エラー例:
1# カッコを閉じ忘れ
2print("こんにちは"1 File "main.py", line 1
2 print("こんにちは"
3 ^
4SyntaxError: '(' was never closed読み方: 「(が閉じられていません」と教えてくれています。^マークが問題のある箇所を指しています。
修正:
1print("こんにちは")もう一つよくある例:
1# if文のコロン忘れ
2if x > 10
3 print("大きい")1 File "main.py", line 1
2 if x > 10
3 ^
4SyntaxError: expected ':'読み方: 「コロン : が必要です」と明確に教えてくれています。
修正:
1if x > 10:
2 print("大きい")ポイント: SyntaxErrorは、Pythonがコードを「読む段階」で発生します。プログラムが実行される前にエラーが出るので、トレースバックが短いのが特徴です。
意味: インデント(字下げ)が正しくない。
よくある原因: スペースとタブの混在、インデントの付け忘れ・過剰なインデント。
エラー例:
1def say_hello():
2print("こんにちは")1 File "main.py", line 2
2 print("こんにちは")
3 ^
4IndentationError: expected an indented block after function definition on line 1読み方: 「1行目の関数定義のあとに、インデントされたブロックが必要です」と教えてくれています。
修正:
1def say_hello():
2 print("こんにちは")もう一つよくある例:
1if True:
2 print("A")
3 print("B")1 File "main.py", line 3
2 print("B")
3 ^
4IndentationError: unexpected indent読み方: 「予期しないインデントがあります」。つまり、インデントが深すぎるということです。
修正:
1if True:
2 print("A")
3 print("B")ポイント: Pythonはインデントでブロック構造を表現する言語です。スペース4つで統一するのが推奨されています。タブとスペースを混ぜると、見た目は正しくてもエラーになることがあるので注意してください。
意味: 定義されていない変数名や関数名を使おうとしている。
よくある原因: 変数名のタイプミス、変数を定義する前に使っている、スコープの問題。
エラー例:
1message = "こんにちは"
2print(mesage)1Traceback (most recent call last):
2 File "main.py", line 2, in <module>
3 print(mesage)
4NameError: name 'mesage' is not defined. Did you mean: 'message'?読み方: 「mesageという名前は定義されていません。messageのことですか?」と、修正候補まで提案してくれています。(Python 3.10以降)
修正:
1message = "こんにちは"
2print(message)ポイント: NameErrorが出たら、まずスペルミスを疑いましょう。大文字・小文字の違い(Name と name)も別の変数として扱われます。
意味: データの型(種類)が合っていない操作をしようとしている。
よくある原因: 文字列と数値の混在、関数の引数の数が違う、呼び出し可能でないオブジェクトを呼び出しているなど。
エラー例:
1age = 25
2print("私は" + age + "歳です")1Traceback (most recent call last):
2 File "main.py", line 2, in <module>
3 print("私は" + age + "歳です")
4TypeError: can only concatenate str (not "int") to str読み方: 「文字列(str)に連結できるのは文字列だけです。int型はダメです」と教えてくれています。
修正方法1:str()で変換する
1age = 25
2print("私は" + str(age) + "歳です")修正方法2:f文字列を使う(おすすめ)
1age = 25
2print(f"私は{age}歳です")関数の引数の数が合わない場合:
1def greet(name, greeting):
2 print(f"{greeting}、{name}さん!")
3
4greet("太郎")1Traceback (most recent call last):
2 File "main.py", line 4, in <module>
3 greet("太郎")
4TypeError: greet() missing 1 required positional argument: 'greeting'読み方: 「greet()関数で必須の引数greetingが1つ足りません」。
修正:
1greet("太郎", "こんにちは")意味: 型は合っているが、値が不適切。
よくある原因: 数値に変換できない文字列を変換しようとした場合など。
エラー例:
1number = int("abc")1Traceback (most recent call last):
2 File "main.py", line 1, in <module>
3 number = int("abc")
4ValueError: invalid literal for int() with base 10: 'abc'読み方: 「abcは10進数のint()として無効な文字列です」。つまり、"abc" は数値に変換できないということです。
修正:
1number = int("123")ユーザー入力の場合の安全な書き方:
1user_input = input("数値を入力してください: ")
2
3try:
4 number = int(user_input)
5 print(f"入力された数値: {number}")
6except ValueError:
7 print("数値を入力してください。文字は受け付けられません。")意味: リストの範囲外の位置にアクセスしようとしている。
よくある原因: リストの要素数を超えたインデックスを指定している。
エラー例:
1fruits = ["りんご", "バナナ", "みかん"]
2print(fruits[3])1Traceback (most recent call last):
2 File "main.py", line 2, in <module>
3 print(fruits[3])
4IndexError: list index out of range読み方: 「リストのインデックスが範囲外です」。fruitsには3つの要素がありますが、インデックスは0から始まるため、使えるのは 0, 1, 2 までです。3は存在しません。
修正:
1fruits = ["りんご", "バナナ", "みかん"]
2print(fruits[2]) # "みかん"ポイント: Pythonのインデックスは0から始まることを常に意識しましょう。要素が3つなら、最後のインデックスは2です。
意味: 辞書に存在しないキーにアクセスしようとしている。
よくある原因: キー名のタイプミス、存在しないキーへの直接アクセス。
エラー例:
1user = {"name": "太郎", "age": 25}
2print(user["email"])1Traceback (most recent call last):
2 File "main.py", line 2, in <module>
3 print(user["email"])
4KeyError: 'email'読み方: 「emailというキーが存在しません」。辞書userにはnameとageしかありません。
修正方法1:正しいキーを使う
1print(user["name"]) # "太郎"修正方法2:getメソッドを使う(安全)
1email = user.get("email", "メールアドレス未登録")
2print(email) # "メールアドレス未登録".get()メソッドを使うと、キーが存在しない場合にデフォルト値を返すので、エラーを回避できます。
意味: 指定したファイルが存在しない。
よくある原因: ファイル名のタイプミス、パスが間違っている、ファイルがまだ作られていない。
エラー例:
1with open("data.txt", "r") as f:
2 content = f.read()1Traceback (most recent call last):
2 File "main.py", line 1, in <module>
3 with open("data.txt", "r") as f:
4FileNotFoundError: [Errno 2] No such file or directory: 'data.txt'読み方: 「data.txtというファイルまたはディレクトリが見つかりません」。
確認すべきこと:
1. ファイル名のスペルは正しいか
2. ファイルの拡張子は正しいか(.txt と .csv の間違いなど)
3. ファイルが本当にそのフォルダにあるか
4. プログラムを実行しているディレクトリはどこか
修正例:
1import os
2
3file_path = "data.txt"
4if os.path.exists(file_path):
5 with open(file_path, "r") as f:
6 content = f.read()
7else:
8 print(f"{file_path} が見つかりません。パスを確認してください。")意味: importしようとしたモジュール(ライブラリ)がインストールされていない。
よくある原因: pip installしていない、仮想環境(venv)が有効になっていない、モジュール名のタイプミス。
エラー例:
1import requests1Traceback (most recent call last):
2 File "main.py", line 1, in <module>
3 import requests
4ModuleNotFoundError: No module named 'requests'読み方: 「requestsというモジュールが見つかりません」。
修正手順:
1# 1. まず仮想環境が有効か確認(ターミナルに (venv) が表示されているか)
2
3# 2. パッケージをインストール
4pip install requests
5
6# 3. もう一度プログラムを実行
7python main.pyポイント: バイブコーディングでこのエラーが出たら、まず仮想環境(venv)が有効になっているか確認しましょう。venvについて詳しくは、「Python仮想環境(venv)超入門」の記事を参考にしてください。
意味: オブジェクトが持っていないメソッドや属性を使おうとしている。
よくある原因: メソッド名のタイプミス、データ型の勘違い、Noneに対してメソッドを呼んでいる。
エラー例:
1numbers = [3, 1, 4, 1, 5]
2numbers.upper()1Traceback (most recent call last):
2 File "main.py", line 2, in <module>
3 numbers.upper()
4AttributeError: 'list' object has no attribute 'upper'読み方: 「listオブジェクトにはupperという属性がありません」。upper()は文字列のメソッドであり、リストには存在しません。
Noneに対するAttributeError(よくあるパターン):
1result = [1, 2, 3].sort()
2print(result.count(1))1Traceback (most recent call last):
2 File "main.py", line 2, in <module>
3 print(result.count(1))
4AttributeError: 'NoneType' object has no attribute 'count'読み方: 「NoneType(None)にはcountという属性がありません」。.sort()メソッドはリストをその場で並べ替えてNoneを返すため、resultはNoneになっています。
修正:
1numbers = [1, 2, 3]
2numbers.sort()
3print(numbers.count(1))エラーメッセージの意味がわからないとき、Google検索は強い味方です。ただし、検索の仕方にはコツがあります。
1Python エラー 動かないこれではヒットする情報が広すぎて、自分の問題に合った解決策が見つかりません。
1Python TypeError can only concatenate str (not "int") to strエラーの種類(TypeError) と エラーメッセージの本文 をそのまま検索するのが最も効果的です。
1. エラーメッセージの最終行をそのままコピーして検索する
1TypeError: can only concatenate str (not "int") to str2. 自分のコード固有の部分は取り除く
悪い例:
1NameError: name 'my_special_variable_name' is not defined良い例:
1Python NameError name is not defined変数名やファイルパスなど、自分のコードにしかない情報は削除しましょう。他の人が同じ変数名を使っているわけではないからです。
3. 「Python」をつける
他の言語でも同じようなエラー名がある場合があるので、先頭に Python をつけると精度が上がります。
4. 日本語で見つからなければ英語で検索する
プログラミング情報は英語の方が圧倒的に多いです。エラーメッセージはもともと英語なので、そのまま検索すれば英語の回答がヒットします。Stack Overflowなどの海外サイトには、大抵のエラーの解決策が載っています。
ChatGPT、Claude、GeminiなどのAIは、エラー解決の強力な助っ人です。ただし、質問の仕方で回答の質が大きく変わります。
1Pythonでエラーが出ました。動きません。助けてください。AIは超能力者ではありません。「動きません」だけでは、何をどうすれば良いかわからないのです。
1以下のPythonコードを実行したところ、エラーが出ました。原因と修正方法を教えてください。
2
3【コード】
4def greet(name):
5 message = "こんにちは、" + name + "さん!"
6 print(message)
7
8greet(123)
9
10【エラーメッセージ】
11Traceback (most recent call last):
12 File "main.py", line 5, in <module>
13 greet(123)
14 File "main.py", line 2, in greet
15 message = "こんにちは、" + name + "さん!"
16TypeError: can only concatenate str (not "int") to str1. コード全体を貼り付ける
エラーが出た行だけでなく、関連するコード全体を共有しましょう。AIは前後の文脈がないと正確な診断ができません。
2. エラーメッセージは全文をコピーする
トレースバックを省略せず、Traceback (most recent call last): から最終行まで全部コピーしてください。途中の行にも重要な情報が含まれています。
3. 何をしようとしていたか説明する
「ユーザーの名前を受け取って挨拶を表示するプログラムを作っています」のように、目的を伝えると、AIはより的確なアドバイスをくれます。
バイブコーディングをしていると、AIから「このパッケージをインストールしてください」と言われることが頻繁にあります。しかし、pip install 自体がエラーになることも少なくありません。
1pip install flask1ERROR: Could not install packages due to an EnvironmentError: [Errno 13] Permission denied原因: グローバル環境にインストールしようとして権限が足りない。
対処法: 仮想環境(venv)を使いましょう。venvの中では権限の問題は起きません。
1python -m venv venv
2source venv/bin/activate # Mac
3# venv\Scripts\activate # Windows
4pip install flask1ERROR: Could not find a version that satisfies the requirement somepackage==99.0
2ERROR: No matching distribution found for somepackage==99.0原因: 指定したバージョンが存在しない、またはPythonのバージョンと互換性がない。
対処法:
1# 利用可能なバージョンを確認
2pip install somepackage==
3
4# バージョンを指定せずにインストール(最新版が入る)
5pip install somepackage1ERROR: Failed building wheel for some-package原因: Cコンパイラなどのビルドツールが必要なパッケージで、環境にビルドツールがない。
対処法:
Windowsの場合:
1# Microsoft C++ Build Toolsをインストールする
2# https://visualstudio.microsoft.com/visual-cpp-build-tools/Macの場合:
1xcode-select --installそれでも解決しない場合は、エラーメッセージ全文をAIに貼り付けて相談するのが最も効率的です。
1'pip' is not recognized as an internal or external command対処法:
1# python -m pip を使う
2python -m pip install flask
3
4# それでもダメならPythonのインストール時にPATHを通したか確認ここまで学んだ知識を使って、実際のトレースバックを読む練習をしましょう。
以下のエラーメッセージを見て、3つの質問に答えてください。
1Traceback (most recent call last):
2 File "app.py", line 15, in <module>
3 result = calculate_total(items)
4 File "app.py", line 8, in calculate_total
5 total = total + item["price"]
6 File "app.py", line 8, in calculate_total
7 total = total + item["price"]
8KeyError: 'price'質問1: エラーの種類は何ですか?
質問2: どのファイルの何行目でエラーが発生していますか?
質問3: 原因は何だと考えられますか?
考えてみてから、下の解答を読んでください。
質問1の答え: KeyError です。辞書に存在しないキーにアクセスしようとしたエラーです。
質問2の答え: app.py の 8行目 です。(最終行の直前にある File "app.py", line 8 を見ます)
質問3の答え: item という辞書に "price" というキーが存在しません。おそらく、キー名が間違っている(たとえば "Price" や "cost" など別の名前になっている)か、一部のデータに "price" キーが含まれていない可能性があります。
修正の方向性:
1# 方法1:辞書の中身を確認する
2print(item.keys()) # どんなキーがあるか表示
3
4# 方法2:getメソッドで安全にアクセス
5total = total + item.get("price", 0)1Traceback (most recent call last):
2 File "main.py", line 12, in <module>
3 display_users(user_list)
4 File "main.py", line 7, in display_users
5 for user in users:
6 print(user.name)
7AttributeError: 'dict' object has no attribute 'name'質問1: エラーの種類は何ですか?
質問2: 原因は何だと考えられますか?
質問1の答え: AttributeError です。
質問2の答え: user は辞書(dict)型なのに、.name というドット記法でアクセスしようとしています。辞書の値を取得するには user["name"] のようにブラケット記法を使う必要があります。
修正:
1for user in users:
2 print(user["name"]) # ドット記法ではなくブラケット記法を使う最後に、バイブコーディング(AIを使った開発)でエラーに遭遇したときの、効果的な伝え方をまとめます。
AIにエラーを伝えるときは、以下のテンプレートを使うと効率的です。
1【やりたいこと】
2(例:Flaskで簡単なWebアプリを作っています)
3
4【実行したコマンド または コード】
5(例:python app.py)
6
7【エラーメッセージ全文】
8Traceback (most recent call last):
9 ...
10(省略せずに全文を貼り付ける)
11
12【試したこと】
13(例:pip install flask は実行済みです)
14
15【環境】
16- OS: Windows 11 / macOS
17- Python: 3.12
18- 仮想環境: venv使用1. 「動きません」だけ伝える
AIにとって「動かない」は情報ゼロです。エラーメッセージという「証拠」を必ず添えましょう。
2. エラーメッセージを自分で要約する
「TypeErrorが出ました」だけでは不十分です。エラーメッセージの全文には、AIが正確に診断するための手がかりがたくさん含まれています。省略せず全文を貼り付けてください。
3. スクリーンショットで送る
エラーメッセージをスクリーンショットで撮って送る人がいますが、テキストとしてコピー&ペーストしましょう。AIはテキストの方が正確に読み取れますし、AIがコードを再現して検証することもできます。
1ユーザー:
2以下のコードでFlaskアプリを起動しようとしたら、エラーが出ました。
3
4【コード(app.py)】
5from flask import Flask
6
7app = Flask(__name__)
8
9@app.route("/")
10def home():
11 return render_template("index.html")
12
13if __name__ == "__main__":
14 app.run(debug=True)
15
16【エラー】
17Traceback (most recent call last):
18 File "app.py", line 7, in home
19 return render_template("index.html")
20NameError: name 'render_template' is not defined
21
22Python 3.12、venv環境で開発しています。このように伝えれば、AIは即座に「render_template をimportしていない」という原因を特定し、修正コードを提示してくれます。
| ステップ | やること | 見る場所 |
|---|---|---|
| 1 | エラーの種類と原因を把握 | 最終行 |
| 2 | 発生場所を確認 | 最終行のすぐ上 |
| 3 | 呼び出し元をたどる | さらに上の行(必要な場合) |
| エラー名 | 意味 | よくある原因 |
|---|---|---|
| SyntaxError | 文法の誤り | カッコやコロンの忘れ |
| IndentationError | インデントの誤り | スペースとタブの混在 |
| NameError | 未定義の名前 | 変数名のタイプミス |
| TypeError | 型の不一致 | 文字列と数値の混在 |
| ValueError | 値が不適切 | 数値変換できない文字列 |
| IndexError | 範囲外のインデックス | リストの要素数超え |
| KeyError | 存在しないキー | 辞書のキー名ミス |
| FileNotFoundError | ファイルが存在しない | パスやファイル名の誤り |
| ModuleNotFoundError | モジュール未インストール | pip install忘れ |
| AttributeError | 存在しない属性 | メソッド名のタイプミス |
1. エラーは味方である
エラーメッセージは、問題の場所と原因を教えてくれる親切なガイドです。怖がらず、積極的に読みましょう。
2. まず最終行を読む
どんなに長いトレースバックでも、最終行にエラーの本質が書かれています。下から上へ読む習慣をつけましょう。
3. 全文をコピーする習慣をつける
Google検索でもAIへの質問でも、エラーメッセージの全文が最も重要な情報です。省略せず、必ず全文を活用しましょう。
エラーメッセージは、プログラミングの世界への「道案内」です。今日学んだ読み方を実践すれば、もうエラーに怯えることはありません。エラーが出たら、「お、何か教えてくれてるな」と思えるようになります。
さあ、エラーを味方につけて、プログラミングを楽しみましょう!

AIにコードを書かせる「バイブコーディング」を始める前に、Python仮想環境(venv)の知識は必須です。venvを知らないまま開発すると、パッケージの競合やバージョン違いで「動かない!」の沼にハマります。この無料講座では、venvの仕組みから実践的な使い方、よくあるトラブルの対処法まで、初心者にもわかりやすく解説します。
無料
AIを使ってWebアプリを作り、実際にインターネットに公開するまでの全体像をわかりやすく解説します。企画→開発→デプロイの流れ、使うツールや技術の選び方、初心者が陥りやすい落とし穴まで、バイブコーディング時代の開発プロセスを俯瞰できるコラムです。
無料
AIがコードを書いてくれる「Claude Code」を徹底解説。Claude Codeとは何か、何ができるのか、インストール方法から基本的な使い方まで、初心者にもわかりやすくステップバイステップで紹介します。バイブコーディングを始めたい方の最初の一歩に最適な無料講座です。
無料
AIにコードを書かせる「バイブコーディング」では、AIが大量のコードを一気に変更します。そのとき、変更履歴を記録し、いつでも前の状態に戻せるGitの知識は必須です。この無料講座では、Gitの基本操作からGitHubへの公開、AIが壊したコードを元に戻す実践テクニックまで、初心者にもわかりやすく解説します。
無料