IndentationError: expected an indented block の原因と直し方
if・for・def・whileの本体を書き忘れたときに出る、Python学習者が最初につまずくエラーです。波括弧の代わりにインデントでブロックを表すPythonならではの挙動を整理します。
エラーメッセージの読み方
File "main.py", line 2
main.py- ファイル名
2- 行番号 — Pythonが構文解析を諦めた位置
IndentationError- エラークラス — 実行前の構文チェックで検出されました
expected an indented block after 'if' statement on line 1- 内容 — 期待していたもの、または見つけられなかったもの
このエラーが出る典型パターン
パターン1
1 if True: 2 print("yes") ^
File "main.py", line 2
print("yes")
^^^^^
IndentationError: expected an indented block after 'if' statement on line 1
ifの本体は必ずインデントが必要です。コロンの後で改行しただけでは、Pythonはどこまでが本体か判断できません。
直し方: (空) を (スペース4) にします。
広告
広告スロット(未設定)
パターン2
1 def greet(): 2 print("hi") ^
File "main.py", line 2
print("hi")
^^^^^
IndentationError: expected an indented block after function definition on line 1
関数定義も本体のインデントが必須です。波括弧を使わないPythonでは、インデントそのものがブロックの境界を表します。
直し方: (空) を (スペース4) にします。
パターン3
1 for i in range(3): 2 print(i) ^
File "main.py", line 2
print(i)
^^^^^
IndentationError: expected an indented block after 'for' statement on line 1
forループの本体も同様です。ループの中身がどこまでかは、インデントの深さだけで決まります。
直し方: (空) を (スペース4) にします。
よくある誤解
コロンを書けば本体は自動で認識されると思いがちですが、コロンは「ここからブロックが始まる」という合図でしかありません。実際に1段インデントした行がなければ、Pythonは本体がどこにも無いと判断します。
まとめ
IndentationError: expected an indented blockは初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。