【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" とすることで、スペースが点(·)、タブが矢印(→)で表示されるようになります。
(画像は空白文字の可視化イメージです)
可視化したら、インデントが混在している箇所を探し、すべて「半角スペース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さん!")
このように、
- 具体的なエラーメッセージ
- エラーが発生したコード全体
- 何を知りたいのか(原因と修正案)
をセットで伝えることで、AIはあなたの状況を正確に理解し、的確な解決策を提示してくれます。AIを優秀なパーソナル家庭教師として活用しましょう。
もう間違えない!インデントエラーを永久に防ぐ予防策
最後に、そもそも IndentationError を発生させないための、最も強力な予防策をご紹介します。
それは、コードフォーマッタ(自動整形ツール)を導入することです。
Pythonには `Black` や `autopep8` といった、コードを保存するたびに自動でPEP 8の規約に沿った美しい形に整形してくれるツールがあります。
これをあなたのコードエディタに設定しておけば、インデントのズレやスペースとタブの混在は、ファイルを保存した瞬間に自動で修正されます。手動でインデントを直す手間から完全に解放され、あなたはロジックを考えることだけに集中できるようになります。
導入方法は「VSCode Black 設定」などで検索すればたくさんの解説記事が見つかります。この一手間が、あなたの未来の開発時間を何十時間も節約してくれるはずです。
まとめ:インデントはPythonの「お作法」
今回は IndentationError の原因と解決法について、私の体験談を交えながら解説しました。
- Pythonのインデントはコードの構造を決める文法である。
- エラーの原因は主に「足りない」「多すぎる」「スペースとタブの混在」の3つ。
- 「コロンの後は一段下げる」「同じレベルは同じ列」を意識する。
- エディタで空白を可視化し、「見えない敵」を見つける。
- 究極の予防策はコードフォーマッタの導入。
インデントは、Pythonという言語の「お作法」のようなものです。最初は少し窮屈に感じるかもしれませんが、このお作法に慣れることで、誰にとっても読みやすく、メンテナンスしやすい、美しいコードが書けるようになります。
このエラーを乗り越えたあなたは、Pythonマスターへの道をまた一歩進みました。これからも一緒に学習を続けていきましょう!
次のステップへ
インデントをマスターしたら、次によく遭遇するのが文法そのものの間違いである `SyntaxError` です。括弧の閉じ忘れやコロンの付け忘れなど、よくあるパターンと解決法を学びましょう。
→ 次の記事を読む:SyntaxError(構文エラー)でよくある間違いと直し方