まず結論
IndentationError は、Pythonが「この行はどのまとまりに入るの?」と分からなくなったときに出ます。
Pythonでは、字下げが意味を持ちます。
if True:
print("ここはifの中")
print() の前に空白があります。
この空白によって、「この行は if の中の処理です」とPythonに伝えています。
こんなときに読む記事です
次のようなエラーで止まった人向けです。
IndentationError: expected an indented blockIndentationError: unexpected indent- 見た目は合っているのに、字下げのエラーが出る
Pythonでは {} ではなく字下げでまとまりを表すので、他の言語よりインデントが大事です。
よくある間違い
字下げがないと、まとまりが分かりません。
if True:
print("ここはifの中")
この場合、print() が if の中なのか外なのかをPythonが判断できません。
逆に、必要ないところで急に字下げしてもエラーになります。
print("はじめ")
print("ここだけ字下げ")
この場合は、Pythonから見ると「なぜ急に内側に入ったの?」という状態です。
直し方
: で終わる行の次は、内側の処理を字下げします。
if True:
print("ここはifの中")
半角スペース4つでそろえるのが一般的です。
タブとスペースが混ざると見た目では分かりにくいので、エディタの自動整形に任せるのがおすすめです。
エラー文で見る場所
エラー文が長くても、まずはこの2つを見ます。
IndentationErrorと書かれているか- 何行目で止まっているか
行番号の近くにある if、for、def、while の後ろを確認すると、原因を見つけやすいです。
まず試す直し方
迷ったら、次の順で確認します。
:で終わる行の次が字下げされているか- 同じまとまりの行で、空白の数がそろっているか
- タブとスペースが混ざっていないか
初心者のうちは、エディタの自動整形を使うのが一番安全です。
3行まとめ
- Pythonでは字下げがコードのまとまりを表す。
- ifやforの次の行は、内側の処理として字下げする。
- 空白の数やタブ混在がずれるとIndentationErrorになりやすい。