まず結論

IndentationError は、Pythonが「この行はどのまとまりに入るの?」と分からなくなったときに出ます。

Pythonでは、字下げが意味を持ちます。

if True:
    print("ここはifの中")

print() の前に空白があります。
この空白によって、「この行は if の中の処理です」とPythonに伝えています。

読む目安

次のようなエラーで止まった人向けです。

  • IndentationError: expected an indented block
  • IndentationError: unexpected indent
  • 見た目は合っているのに、字下げのエラーが出る

Pythonでは {} ではなく字下げでまとまりを表すので、他の言語よりインデントが大事です。

イメージで考える

インデントは、コードを入れる小さな枠のようなものです。

if の下にある処理は、少し右へずれて同じ枠の中に入ります。

急に枠の外へ出たり、関係ない行だけ内側へ入ったりすると、Pythonはまとまりを見失います。

よくある間違い

字下げがないと、まとまりが分かりません。

if True:
print("ここはifの中")

この場合、print()if の中なのか外なのかをPythonが判断できません。

逆に、必要ないところで急に字下げしてもエラーになります。

print("はじめ")
    print("ここだけ字下げ")

この場合は、Pythonから見ると「なぜ急に内側に入ったの?」という状態です。

直し方

: で終わる行の次は、内側の処理を字下げします。

if True:
    print("ここはifの中")

半角スペース4つでそろえるのが一般的です。
タブとスペースが混ざると見た目では分かりにくいので、エディタの自動整形に任せるのがおすすめです。

エラー文で見る場所

エラー文が長くても、まずはこの2つを見ます。

  • IndentationError と書かれているか
  • 何行目で止まっているか

行番号の近くにある iffordefwhile の後ろを確認すると、原因を見つけやすいです。

まず試す直し方

迷ったら、次の順で確認します。

  1. : で終わる行の次が字下げされているか
  2. 同じまとまりの行で、空白の数がそろっているか
  3. タブとスペースが混ざっていないか

初心者のうちは、エディタの自動整形を使うのが一番安全です。

手を動かすミニ練習

次のコードの字下げを消すと、どんなエラーになるか確認してみましょう。

score = 80

if score >= 60:
    print("合格")

print("合格") の前の空白が、if文の中身であることを表しています。