PythonでのIndentationError: expected an indented blockの修正方法

beginner🐍 Python2026-03-17| Python 2.x / 3.x、任意のOS(Linux、macOS、Windows)、任意のエディタまたはターミナル

Error Message

IndentationError: expected an indented block
#python#インデント#構文

TL;DR

コロン(:)を書いたのに、その下のブロックが空になっています。Pythonは最低でも1つのステートメントがないと処理を続けられません。実際のコードを追加するか、プレースホルダーとしてpassを入れましょう。また、タブとスペースを混在させていないか確認してください — Python 3ではこれはハードエラーとして扱われます。

このエラーが発生する原因

Pythonでは、コロンは単なる句読点ではなく「約束」です。:で終わるすべてのステートメントの後には、インデントされたブロックが必要です。これはifelseelifforwhiledefclasswithtry/except/finallyすべてに適用されます。

ブロックの本体を省略すると、Pythonは次のエラーを投げます:

IndentationError: expected an indented block

よくあるケースと修正方法

1. 空の関数またはクラスの本体

関数やクラスのスタブを作ったが、まだ本体を書いていない場合:

# 悪い例
def my_function():

class MyClass:

修正方法 — passを追加する:

# 良い例
def my_function():
    pass

class MyClass:
    pass

2. コメントだけの本体

コメントはステートメントとしてカウントされません。Pythonはブロックが空だと判断します — その# TODOは存在しないも同然です:

# 悪い例
def process():
    # TODO: ここを実装する

def main():
    # 近日公開

修正方法 — コメントにpassを添える:

# 良い例
def process():
    # TODO: ここを実装する
    pass

3. if/elseで本体が欠けている場合

# 悪い例
if condition:
else:
    do_something()

修正方法:

# 良い例
if condition:
    pass
else:
    do_something()

4. try/exceptブロックが空の場合

# 悪い例
try:
except ValueError:
    handle_error()

修正方法:

# 良い例
try:
    risky_call()
except ValueError:
    handle_error()

5. タブとスペースの混在

これは見落としやすいケースです。エディタ上ではインデントされているように見えるのに、ある行はタブ、別の行はスペースを使っています。Python 3はこれを完全に拒否します。TabErrorが出ることもありますが、IndentationErrorとして現れることもあります。

# 悪い例(ある行はタブ、別の行はスペース)
def greet():
	print("hello")   # タブ
    print("world")   # スペース

スペースに統一しましょう — PEP 8が推奨するように1レベルにつき4スペース:

def greet():
    print("hello")
    print("world")

エディタで一括変換するには:VS Code → コマンドパレット → 「インデントをスペースに変換」。vimの場合は:retabを実行。ターミナルからは:

expand -t 4 myfile.py > myfile_fixed.py

6. 誤ってインデントが外れたブロック

# 悪い例
for item in items:
print(item)   # インデントされていない

修正方法:

# 良い例
for item in items:
    print(item)

トレースバックの読み方

Pythonのエラーメッセージは問題の箇所を直接示してくれます:

  File "script.py", line 5
    def helper():
              ^
IndentationError: expected an indented block

5行目がPythonが本体の始まりを期待した場所です。キャレットの前の行を確認してください — そこにコロンがあります。その下のブロックが空か、インデントが間違っています。

簡易チェックリスト

  • 行末の:の後は、必ず次の行にインデントされたブロックが必要です。
  • 空のブロックにはpassが必要です。
  • コメント単独ではブロックの要件を満たしません — その下にpassを追加してください。
  • スペースのみを使用してください — 1レベルにつき4スペース。Tabキーを押したときにスペースが挿入されるようエディタを設定しましょう。
  • python -m py_compile yourfile.pyを実行して、実行前に構文エラーを検出してください。

修正の確認

ファイルを実行せずに構文チェックを行うには:

python -m py_compile script.py
echo $?   # 0はクリーンを意味する

より広範なスタイルとエラーチェックには、flake8がより多くの項目をカバーします:

pip install flake8
flake8 script.py

出力がなければ問題なしです。py_compileが0で終了すれば、IndentationErrorは解消されています。

このエラーを防ぐエディタ設定

  • VS Codesettings.json"editor.tabSize": 4"editor.insertSpaces": trueを設定する。
  • PyCharm:Pythonファイルに対してデフォルトで4スペースのインデントが設定されています。
  • Vim.vimrcautocmd FileType python setlocal expandtab shiftwidth=4 tabstop=4を追加する。

Related Error Notes