MeWrite Docs

IndentationError: unexpected indent

Pythonコードのインデントが不正な場合に発生するエラー

概要

IndentationError は、Pythonコードのインデント(字下げ)が正しくない場合に発生するエラーです。Pythonはインデントでブロック構造を表現するため、インデントの一貫性が重要です。

エラーメッセージ

  File "script.py", line 3
    print("Hello")
    ^
IndentationError: unexpected indent
  File "script.py", line 4
    return x
    ^
IndentationError: expected an indented block

原因

  1. 不要なインデント: インデントが不要な場所でインデントしている
  2. インデント不足: if、for、def などの後にインデントがない
  3. タブとスペースの混在: タブとスペースが混在している
  4. インデントの不一致: 同じブロック内でインデント幅が異なる

解決策

1. 不要なインデントを削除

1
2
3
4
5
6
7
# ❌ 間違い
x = 5
    print(x)  # 不要なインデント

# ✅ 正しい
x = 5
print(x)

2. 必要なインデントを追加

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# ❌ 間違い
def my_function():
pass  # インデントがない

if True:
print("Yes")  # インデントがない

# ✅ 正しい
def my_function():
    pass

if True:
    print("Yes")

3. タブとスペースを統一

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# ❌ 間違い(混在)
def my_function():
    if True:
	    print("Tab")  # タブ
        print("Space")  # スペース

# ✅ 正しい(スペース4つで統一)
def my_function():
    if True:
        print("First")
        print("Second")

4. インデント幅を統一

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# ❌ 間違い(幅が不一致)
def my_function():
    x = 1
      y = 2  # スペース6つ
    z = 3

# ✅ 正しい(スペース4つで統一)
def my_function():
    x = 1
    y = 2
    z = 3

5. ネストしたブロック

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# ❌ 間違い
def process():
    for i in range(10):
    if i > 5:  # インデント不足
    print(i)

# ✅ 正しい
def process():
    for i in range(10):
        if i > 5:
            print(i)

6. 複数行の文

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# ❌ 間違い
result = (1 + 2 +
    3 + 4)  # 継続行のインデントが不適切

# ✅ 正しい(開き括弧に揃える)
result = (1 + 2 +
          3 + 4)

# ✅ 正しい(ハンギングインデント)
result = (
    1 + 2 +
    3 + 4
)

エディタ設定

VSCode

1
2
3
4
5
6
7
8
9
{
  "editor.tabSize": 4,
  "editor.insertSpaces": true,
  "editor.detectIndentation": false,
  "[python]": {
    "editor.tabSize": 4,
    "editor.insertSpaces": true
  }
}

PyCharm

  1. Settings → Editor → Code Style → Python
  2. Tab size: 4
  3. Indent: 4
  4. Use tab character: オフ

デバッグのコツ

インデント文字の可視化

1
2
3
4
# タブを可視化
cat -A script.py

# ^I がタブ、スペースはそのまま表示

自動修正ツール

1
2
3
4
5
6
7
# autopep8でインデント修正
pip install autopep8
autopep8 --in-place --aggressive script.py

# blackで自動フォーマット
pip install black
black script.py

Python の他のエラー

最終更新: 2025-12-08