🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

【Python初心者必見】IndentationErrorは怖くない!元初心者が教える原因と秒速解決法

皆さん、こんにちは!ほんの数ヶ月前までプログラミング知識ゼロだった私が、AIの力を借りながら1ヶ月半で2つのWebサイトを立ち上げた経験を基に、初心者がつまずきやすいポイントを解説しています。

Pythonを学び始めて、多くの人が最初に遭遇するであろう赤いエラーメッセージ...。その中でも特に「え、なんで?どこが間違ってるの?」と頭を抱えがちなのが、今回解説する IndentationError ではないでしょうか。

私も最初はそうでした。たった1つのスペースが原因で何時間も溶かしてしまい、「もうプログラミング向いてないかも…」なんて思ったこともあります。でも、安心してください。この記事を読めば、IndentationErrorはもう怖くありません。原因は驚くほどシンプルで、一度理解してしまえば二度と迷わなくなります。

この記事では、私が実際につまずいた経験を踏まえ、「同じ初心者としての目線」でエラーの原因と解決法、そして二度とこのエラーに悩まされないための予防策まで、徹底的に解説します。コピペするだけで動くコードをたくさん用意したので、ぜひ一緒に「動く!」を体験していきましょう!


そもそも、なぜPythonはインデントにこんなに厳しいの?

他のプログラミング言語(例えばJavaScriptやC言語)を少しでも見たことがある方は、「なんでPythonだけ、字下げ(インデント)でエラーが出るんだ?」と不思議に思うかもしれません。

多くの言語では、コードの「かたまり」を { } (波括弧) で囲みます。こんな感じです。

// これはJavaScriptの例です
if (x > 10) {
  console.log("xは10より大きいです。");
  console.log("この行も同じかたまりです。");
}

{ } があれば、どこからどこまでが if の中身なのかが一目瞭然ですね。インデントがバラバラでも、プログラムは動きます。

一方、Pythonの設計思想は「読みやすいコードは、良いコードだ」というものです。誰が書いても同じような、スッキリとして見やすいコードになるように、{ } の代わりにインデントを使ってコードのかたまりを表現するルールを採用しました。

つまり、Pythonにとってインデントは、単なる見た目の問題ではなく、コードの構造を決定づける文法そのものなのです。

コロン(:)の後に続く、一段下がったコードのブロック。これがPythonの「かたまり」のサインです。

# これはPythonの例
age = 20
if age >= 20:
    # この部分はインデントされているので if の「かたまり」
    print("あなたは成人です。")
    print("お酒もタバコもOKです。")
# この部分はインデントされていないので if の外
print("プログラムを終了します。")

IndentationError よくある原因トップ3と完全解決マニュアル

それでは、実際に IndentationError が発生する代表的な3つの原因と、それぞれの解決策を見ていきましょう。

原因1:インデントが足りない (expected an indented block)

これは「ここにインデントされたブロックが必要ですよ!」とPythonが教えてくれているエラーです。if, for, def, class など、コロン(:)で終わる行の次には、必ずインデントが必要です。

よくある間違い 👎

# エラーになるコード
name = "Taro"
if name == "Taro":
print("こんにちは、Taroさん!") # if の次の行がインデントされていない

これを実行すると、IndentationError: expected an indented block というエラーが出ます。

解決策 👍
コロン(:)の次の行を、半角スペース4つ分、インデント(字下げ)します。ほとんどのエディタでは、Tabキーを1回押すだけでスペース4つ分が自動で入るように設定されています。

コロンの後は、一段下げる」と呪文のように覚えてしまいましょう。

# 正常に動くコード
name = "Taro"
if name == "Taro":
    # 半角スペース4つでインデント
    print("こんにちは、Taroさん!") 

原因2:インデントが多すぎる (unexpected indent)

こちらは先ほどとは逆で、「ここにはインデントいらないんだけどな…」というPythonからのツッコミです。意味もなくインデントを入れてしまうと、このエラーが発生します。

よくある間違い 👎

# エラーになるコード
print("処理を開始します。")
    print("この行はなぜかインデントされている。") # 理由のないインデント
print("処理を終了します。")

これを実行すると、IndentationError: unexpected indent というエラーが出ます。

解決策 👍
インデントは、if文やfor文などのブロックの始まりを示すためにだけ使います。それ以外の場所では、行の先頭からコードを書き始めてください。

同じレベルの処理は、同じ列に並べる」と意識すると分かりやすいです。

# 正常に動くコード
print("処理を開始します。")
print("この行はインデントしない。") # インデントを削除
print("処理を終了します。")

原因3:スペースとタブの混在 (tab error)

これが初心者にとって最も厄介な「見えない敵」です。見た目は同じように字下げされていても、ある行は「半角スペース4つ」で、別の行は「Tabキー1つ」でインデントされていると、Pythonは混乱してエラーを出します。

Web上からコードをコピー&ペーストした時によく発生します。私もこれで何度も時間を無駄にしました…。

解決策 👍
この問題を解決するには、まず「敵」を可視化することが重要です。お使いのコードエディタ(Visual Studio Codeなど)には、スペースやタブを記号で表示する機能が必ずあります。

例えばVS Codeなら、「表示」メニューから「空白のレンダリング」を選択するか、設定で "editor.renderWhitespace": "all" とすることで、スペースが点(·)、タブが矢印(→)で表示されるようになります。

Visual Studio Codeで空白文字を可視化した例。スペースが点で、タブが矢印で表示されている。 (画像は空白文字の可視化イメージです)

可視化したら、インデントが混在している箇所を探し、すべて「半角スペース4つ」に統一しましょう。多くのエディタには、ファイル全体のタブをスペースに一括変換する機能もあります。

Pythonの公式コーディング規約(PEP 8)でも、インデントには半角スペース4つを使うことが強く推奨されています。特別な理由がない限り、このルールに従いましょう。

# 推奨される書き方
def my_function():
    # このインデントは半角スペース4つ
    print("スペース4つでインデントされています。")
    if True:
        # このインデントは半角スペース8つ (4 * 2)
        print("ネスト(入れ子)にするとさらに4つ追加します。")

【AI時代の学習術】IndentationErrorをAIに相談するコツ

エラーが出た時、ChatGPTのようなAIに相談するのは非常に有効な手段です。私も日常的に活用しています。しかし、聞き方一つで得られる回答の質が大きく変わります。

悪い質問例 👎

IndentationErrorが出ました。直してください。

これではAIも情報が足りず、一般的な回答しかできません。

良い質問例(プロンプト) 👍

以下のPythonコードを実行すると `IndentationError: expected an indented block` というエラーが発生します。

1. エラーの原因は何ですか?
2. どの行をどのように修正すれば良いか、修正後のコード全体を教えてください。

▼エラーが発生するコード

# ここに自分のコードを貼り付ける
name = "Taro"
if name == "Taro":
print("こんにちは、Taroさん!")

このように、

  1. 具体的なエラーメッセージ
  2. エラーが発生したコード全体
  3. 何を知りたいのか(原因と修正案)

をセットで伝えることで、AIはあなたの状況を正確に理解し、的確な解決策を提示してくれます。AIを優秀なパーソナル家庭教師として活用しましょう。


もう間違えない!インデントエラーを永久に防ぐ予防策

最後に、そもそも IndentationError を発生させないための、最も強力な予防策をご紹介します。

それは、コードフォーマッタ(自動整形ツール)を導入することです。

Pythonには `Black` や `autopep8` といった、コードを保存するたびに自動でPEP 8の規約に沿った美しい形に整形してくれるツールがあります。

これをあなたのコードエディタに設定しておけば、インデントのズレやスペースとタブの混在は、ファイルを保存した瞬間に自動で修正されます。手動でインデントを直す手間から完全に解放され、あなたはロジックを考えることだけに集中できるようになります。

導入方法は「VSCode Black 設定」などで検索すればたくさんの解説記事が見つかります。この一手間が、あなたの未来の開発時間を何十時間も節約してくれるはずです。


まとめ:インデントはPythonの「お作法」

今回は IndentationError の原因と解決法について、私の体験談を交えながら解説しました。

インデントは、Pythonという言語の「お作法」のようなものです。最初は少し窮屈に感じるかもしれませんが、このお作法に慣れることで、誰にとっても読みやすく、メンテナンスしやすい、美しいコードが書けるようになります。

このエラーを乗り越えたあなたは、Pythonマスターへの道をまた一歩進みました。これからも一緒に学習を続けていきましょう!

次のステップへ

インデントをマスターしたら、次によく遭遇するのが文法そのものの間違いである `SyntaxError` です。括弧の閉じ忘れやコロンの付け忘れなど、よくあるパターンと解決法を学びましょう。

→ 次の記事を読む:SyntaxError(構文エラー)でよくある間違いと直し方