プログラミングスクール デイトラ 全コース10000円OFF 8/31日まで

初心者向け|プログラミングで起こるエラーの種類と直し方【保存版】

6 min 33 views
エラーは怖くない

この記事のねらい

「エラーが出た。何を見ればいいの?」を無くします。

代表的なエラーの“名前・原因・対処”を表で素早く引けるようにし、最後に直し方の手順未然防止もまとめました。

検索で見つけやすいキーワードも散りばめています(プログラミング エラー 種類 初心者 デバッグ など)

まずは全体像:エラーは大きく3系統だけ覚える

系統いつ起きる?代表例ざっくり原因直し方の軸
構文エラー(Syntax)実行前の解釈
(パース)時
SyntaxError, Unexpected token文法ミス(カッコ抜け、コロン忘れなど)エディタで該当行を修正。自動整形(formatter)で予防
実行時エラー(Runtime/例外)実行中の
特定の瞬間
TypeError, ReferenceError, NameError, FileNotFoundError値や環境が想定外(存在しない、型が違う、権限なし等)エラーメッセージとスタックトレースを読み、入力や前提条件を直す
論理エラー(バグ)実行できるが
結果が変
無限ループ、誤計算、オフバイワン考え違い・条件式のミス・境界の理解不足テスト出力の比較最小再現で差分を特定

代表的なエラーの種類(早見表)

言語ごとに名前は少し違っても意味はほぼ共通です。

Python/JavaScript/Java/C系の初学者でよく出るものを中心に掲載。

種類(よく見る表記)典型メッセージ例よくある原因見つけ方のコツすぐ試す対処
SyntaxError / パースエラーSyntaxError: invalid syntax / Unexpected token括弧/クォート閉じ忘れ、末尾カンマ、コロン忘れエラー行の直前も疑う(ズレやすい)自動整形(Prettier, Black等)→差分を見る
ReferenceError / NameErrorReferenceError: x is not defined / NameError: name 'x' is not defined変数名のタイポスコープ外、宣言前使用まずスペル→宣言位置とスコープ確認変数を先に宣言引数で受け渡し
TypeErrorTypeError: x is not a function / unsupported operand type(s)型の取り違え(数値に文字列足す等)型をログ出力して事実確認明示的に型変換、分岐で型チェック
AttributeError / Property undefinedAttributeError: 'NoneType' object has no attribute / Cannot read properties of undefinednull/undefinedにアクセス対象が必ずある前提を崩す存在チェック
(ガード節、オプショナルチェーン)
IndexError / KeyErrorlist index out of range / KeyError: 'id'配列/辞書にない要素へアクセス**長さ(length/len)**を先にログ範囲チェック
get()inで確認
ZeroDivisionErrordivision by zeroユーザ入力や計算で0で割ったとき分母の事前検証0のときの分岐
(早期return)
FileNotFoundError / ENOENTNo such file or directoryパス間違い、相対パスの起点勘違い現在ディレクトリ実在確認絶対パス化存在チェック、権限確認
PermissionError / EACCESPermission denied書き込み権限なし、管理者権限不要?実行ユーザと権限を確認保存先変更、権限付与
ImportError / ModuleNotFoundNo module named 'xxx' / Cannot find module依存の未インストール、仮想環境違い使用中の環境/パスを表示再インストール環境を統一
Timeout / NetworkErrorETIMEDOUT ECONNREFUSEDネットワーク不調、API先の遅延リトライで再現性を見るタイムアウト値/リトライ/バックオフ
MemoryError / OutOfMemoryKilled / OutOf memory大きすぎる配列・無限生成入力規模を縮小して比較分割処理ストリーミング
論理エラー
(オフバイワン)
目に見えるエラー無しループの境界を1つズラす最小のケースで境界を検証<=/<意図をコメントで固定
浮動小数点誤差0.1 + 0.2 != 0.3小数の二進表現誤差期待値と誤差許容を設計丸めor **整数(最小単位)**で扱う
並行性/レース(入門外)たまに壊れる共有データの同時書き込み再現が低頻度排他不変データ

実例で理解:同じミスでも言語で出方が違う

JavaScript

console.log(total); // ReferenceError: total is not defined
let price = 100;

Python

print(total)  # NameError: name 'total' is not defined
price = 100

ポイント

  • 宣言 or 代入の前に使っていないか?
  • スコープ(関数の内外)をまたいでいないか?

JavaScript

const n = 10;
console.log(n.toFixed + 2); // TypeError: n.toFixed is not a function

Python

x = "10"
print(x + 2)    # TypeError: can only concatenate str (not "int") to str

ポイント

  • 型をログで確認console.log(typeof x) / print(type(x))
  • 必要に応じて明示的に変換Number(x), int(x) など)

Python

arr = [1,2,3]
print(arr[3])     # IndexError: list index out of range

user = {"name": "Alice"}
print(user["id"]) # KeyError: 'id'

対策

  • 範囲前に len(arr) を確認
  • user.get("id")無ければNoneを返す安全アクセス

はじめてのデバッグ:5つの固定ルート

  1. エラーメッセージを“まるごと”読む
    • 最初の1行=種類その下=理由スタックトレース=壊れた関数・行番号
  2. “直前の変更”と“最小再現”
    • 余計な処理を削ぎ落として10行前後まで小さく再現。原因が浮かび上がる。
  3. 値の事実確認(ログ)
    • 変数の中身・型・配列長を出力して「思い込み」を排除。
  4. 境界・前提条件のチェック
    • null/undefined/None、空配列、0割、ファイル有無、権限などをif文でガード
  5. 公式ドキュメント/エラー名で検索
    • "TypeError: ..."コピペ検索。同名事例に当たり、原因と解が最短で見つかる。

症状→確認ポイント(逆引き表)

症状まず見る場所追加でやること
“突然”壊れた直前の差分(Gitの変更)変更点だけで最小再現を作る
ローカルOK・本番NG環境差(OS/Node/Python/権限/パス)バージョン出力、絶対パスで固定
たまに失敗非同期/ネットワーク/時間依存リトライ待機・疑似負荷
計算だけおかしい境界と丸めテストで境界値(0,1,MAX-1,MAX)
長文のSyntaxError直前の括弧/クォート自動整形を走らせ差分で気づく

エラーを減らす「仕込み」(未然防止)

施策何が減る?ツール/ヒント
Linter + Formatter構文/スタイルミスESLint/Prettier、Flake8/Black を保存時に自動実行
型の明示TypeErrorTypeScript / Pythonのtyping意図を型に残す
入力バリデーションRuntime全般Web/APIは必ず検証(必須・範囲・形式)
例外ハンドリング予期せぬ落ちtry-catch / try-exceptユーザ向けメッセージ
小さなテスト論理エラー単体テスト+境界値(0、空、最大)
ログの粒度設計原因特定の速さINFO=流れ, DEBUG=値 を出す指針を決める
環境の固定依存/Import系requirements.txt / package-lock.json / 仮想環境

コピペで使える:例外ハンドリングの型(テンプレ)

JavaScript(Node/ブラウザ)

try {
  const data = await fetchJson(url);   // ここが落ちやすい
  if (!data || !Array.isArray(data.items)) {
    throw new Error("Unexpected response shape");
  }
  render(data.items);
} catch (err) {
  console.error("[ERROR]", err.message);
  alert("処理に失敗しました。時間をおいて再度お試しください。");
}

Python

from typing import Any

def safe_div(a: float, b: float) -> float | None:
    try:
        if b == 0:
            return None
        return a / b
    except Exception as e:
        print("[ERROR]", e)
        return None

検索に強い“調べ方”フレーズ(即実務)

  • "<エラー名> <関数名またはライブラリ名> <言語>"
    例: TypeError map is not a function JavaScript
  • "環境差 <OS/ランタイム> <エラー名>"
    例: ModuleNotFoundError venv Windows
  • "再現手順 <要約>"
    例: list index out of range when last element

よくある質問(FAQ)

Q1. Warnings(警告)は無視していい?
A. 基本は無視しない。将来エラー化・非推奨の合図。時間がなければ記録して後で対応。

Q2. どこから触ればいいか毎回迷います。
A. スタックトレースの末尾に近い自分のコードから。ライブラリ内部より自分の呼び出し側を直す。

Q3. 直せたと思ったら別の場所が壊れました。
A. 変更で副作用が出ています。テストコミット粒度を小さくして影響範囲を管理。

Q4. 再現しない不具合はどう詰める?
A. ログを濃くして「起点→途中→失敗点」をつなぐ。入力サイズ時刻も記録。

Q5. 初心者がまず覚えるべき3つは?
A. Syntax / Reference(Name) / Typeこの三兄弟を潰せると9割の“最初の壁”は越えられます

まとめ:エラーメッセージは“敵じゃなく説明書”

  • 構文・実行時・論理の3系統を意識する
  • 種類→原因→対処を表で逆引きする
  • 最小再現+ログ+境界チェックで迷子にならない
  • Linter/Formatter・型・テストで未然に減らす

ポイント

この記事の表を自分の言語に合わせてチートシート化し、エディタに貼る。

“まず確認する3項目”エラー名、行番号、直前の変更)を毎回声に出して確認しましょう。

継続は最強のデバッグ術です。

ここらをスクールでしっかり学びたいなら

とりあえず安くPythonを使えるようになりたい人は

しっかりPythonと周辺技術を学んで就職につなげたい人は

下地があるけど、しっかり学びたい。でも安い方がいい人は、ここのWebアプリ開発かPythonコースがオススメ。しっかり学べてお値段格安。

関連記事