プログラミングでエラーが出たときの読み方。初心者が試す5つの手順
エラーメッセージの見方と、原因を小さく切り分ける手順を、Pythonの短い例でやさしく解説します。
プログラムを学び始めると、赤い文字が何行も表示されることがあります。
最初は驚きますが、エラーは「失敗した」という印ではありません。コンピューターが、止まった場所や理由を教えてくれる手がかりです。
この記事では、エラーが出たときに何を見て、どの順番で直せばよいかを整理します。
まず覚えたい3種類
エラーや不具合は、大きく3種類に分けると考えやすくなります。
| 種類 | どんな状態か | 例 |
|---|---|---|
| 文法エラー | 言語の書き方に合っていない | 記号やかっこの不足 |
| 実行時エラー | 動き始めた後に処理を続けられなくなる | 存在しない要素を読む |
| 論理エラー | 最後まで動くが、結果が意図と違う | 計算式や条件の間違い |
文法とは、プログラミング言語ごとに決められた書き方のルールです。
実行時は、書いたプログラムが実際に動いている時間を指します。論理エラーは一般にバグとも呼ばれます。バグとエラーの違いは、プログラミング基本用語の記事でも説明しています。
手順1:最後の1〜3行を読む
エラー表示が長いときは、まず最後の部分を見ます。Pythonでは、最後の行にエラーの種類と理由が書かれることが多いためです。
次のプログラムを実行してみます。
price = "120"
count = 3
total = price + count
print(total)
実行すると、最後に次のような表示が出ます。
TypeError: can only concatenate str (not "int") to str
TypeErrorは、値の種類である型の組み合わせに問題があることを表します。
この例では、priceが文字列、countが整数です。文字と数値をそのまま足そうとしたため、処理を続けられませんでした。
手順2:ファイル名と行番号を探す
エラー表示には、問題が見つかったファイル名と行番号も含まれます。
File "shop.py", line 3
これは「shop.pyの3行目を処理しているときに問題が見つかった」という意味です。
ただし、原因が必ずその行にあるとは限りません。前の行で作った値が間違っていて、次の行で初めて問題になる場合もあります。該当行を見た後は、その少し上も確認しましょう。
手順3:値と型を表示する
変数の中身が予想と違うときは、途中で表示して確認します。
print(price)
print(type(price))
typeは、値の型を調べるPythonの機能です。先ほどのpriceなら、文字列を表すstrと表示されます。
数値として計算したい場合は、整数へ変換します。
price = int("120")
count = 3
total = price + count
print(total)
結果は123になります。
用語メモ: このように、処理の途中で値を確認しながら原因を探す作業をデバッグといいます。
手順4:問題を小さくする
長いプログラムのまま原因を探すと、確認する場所が増えてしまいます。
まず、関係がありそうな処理だけを残します。入力、計算、表示の3つがあるなら、一つずつ動かして確かめます。
user_input = input("値段を入力してください: ")
print(user_input)
print(type(user_input))
ここまで正しく動いたら、次に数値への変換を追加します。
一度に何か所も直すのではなく、一つ変更する → 動かす → 結果を見るの順に進めると、どの変更が効いたのか分かります。
手順5:検索やAIへ渡す情報を整える
自分だけで分からないときは、エラー名を検索したり、AIへ質問したりして構いません。
そのときは、次の情報をそろえると原因を見つけやすくなります。
- 使っている言語とバージョン
- エラーメッセージの最後の部分
- 問題が起きる最小限のコード
- 本来はどう動いてほしいか
- すでに試したこと
たとえば、次のように質問できます。
Pythonで文字列と整数を足したところ、TypeErrorになりました。
「120」を数値として3と足したいです。どこを直せばよいですか?
パスワード、住所、APIキーなどは貼らないでください。APIキーは、外部サービスを利用する人やプログラムを識別する秘密の文字列です。公開すると、他人に使われるおそれがあります。
よくある確認ポイント
原因が分からないときは、次の順で見直します。
- かっこ、引用符、コロン、セミコロンなどが抜けていないか
- 変数名の大文字と小文字が合っているか
- 文字列と数値を取り違えていないか
- 配列やリストに存在しない位置を読んでいないか
- ファイルを保存してから実行したか
- 修正したファイルと、実行しているファイルが同じか
最後の2つは意外とよくあります。コードが正しいように見えるときほど、保存先と実行対象を確認してみましょう。
小さな練習
次のコードではエラーが発生します。原因を考えて、最後の数値30を表示できるように直してください。
numbers = [10, 20, 30]
print(numbers[3])
模範解答
numbers = [10, 20, 30]
print(numbers[2])
解説
Pythonのリストは、先頭を0番として数えます。
10は0番、20は1番、30は2番です。3番目の要素は存在しないため、numbers[3]ではIndexErrorが発生します。
エラー名を見た後に、リストの中身と指定した番号を確認すれば、原因を小さく絞り込めます。
まとめ
- 長いエラー表示は、まず最後の1〜3行を読みます。
- ファイル名と行番号を確認し、その行だけでなく少し上も見ます。
- 変数の値と型を表示すると、予想との違いを発見できます。
- コードを小さくして、一つ変更するたびに動かします。
- 検索やAIを使うときは、エラー名、短いコード、期待する動作を伝えます。
エラーを一度で消せなくても問題ありません。表示された手がかりを一つずつ確かめることが、そのままプログラムを読む練習になります。