ホーム › エラー解決 › Python › IndentationError
Python ERROR

Python IndentationError: unexpected indent の原因と直し方

「IndentationError: unexpected indent」は、行頭に余分なスペースやタブがあるときに出るPythonのインデント(字下げ)エラーです。原因と直し方を実行しながら確認できます。How to fix IndentationError: unexpected indent in Python — 余分な行頭の空白を削除し、タブをスペース4つに統一すれば解決します。下の診断ツールにコードを貼れば問題行がすぐ分かります。

🔍 インデントエラー診断ツール(コードを貼るだけ)

Pythonコードを貼ると、タブ混在・字下げの飛び・「:」の後に下がっていない行などを行番号つきで検出します。コードはブラウザ内で処理され、送信されません。

このエラーメッセージ

IndentationError: unexpected indent

原因

❌ エラーになるコード

NG
x = 10
    y = 20
print(x + y)

✅ 修正したコード

OK
x = 10
y = 20
print(x + y)
▶ 修正済みコードを実行エディタで開く
progoのPython実行環境(インストール不要・登録不要)でその場で動作を確認できます。

解決のポイント

Pythonはインデントで処理のまとまりを表します。if・for・defなど「:」の次の行以外は、行頭にスペースを入れてはいけません。ブロック内は半角スペース4つで統一するのが基本です。タブとスペースを混在させないよう、エディタの表示を「スペース」に固定しましょう。

「unexpected indent」が出る主な5パターン

逆のエラー: expected an indented block

IndentationError: expected an indented block は「字下げが足りない」逆のケースです。if や def の次の行が下がっていないと出ます。中身を4スペース下げれば直ります。中身がまだ無いときは pass を置きます。

NG
def greet():
print("hi")
OK
def greet():
    print("hi")

TabError: inconsistent use of tabs and spaces

見た目は揃っていても、行によってタブと半角スペースが混ざっていると TabError: inconsistent use of tabs and spaces in indentation になります。Pythonはタブを内部的に「幅8」として扱うため、エディタ上で揃って見えても実際の文字は一致しないことがあります。

NG(タブとスペースが混在)
def calc(x):
	if x > 0:
        return x * 2
    return 0
OK(すべて半角スペース4つに統一)
def calc(x):
    if x > 0:
        return x * 2
    return 0
▶ 修正済みコードを実行エディタで開く
progoのPython実行環境(インストール不要・登録不要)でその場で動作を確認できます。

ネストしたif/forでインデントがずれる場合

ブロックが二重・三重になると、どこか1行だけ字下げがずれてIndentationErrorになりやすくなります。内側のブロックほど字下げを1段階(4スペース)ずつ増やすのが原則です。

NG
for i in range(3):
    if i == 1:
       print(i)
OK
for i in range(3):
    if i == 1:
        print(i)
▶ 修正済みコードを実行エディタで開く
progoのPython実行環境(インストール不要・登録不要)でその場で動作を確認できます。

VSCode / エディタ側の設定で再発を防ぐ

🧰 他のチェッカー
JS構文エラーチェッカーJSON検証ツールundefined原因箇所チェッカー

よくある質問

「unexpected indent」と「expected an indented block」の違いは?
unexpected indent は「下げすぎ(余分な字下げ)」、expected an indented block は「下げ足りない(ブロックの中身が下がっていない)」で意味は逆です。前者はスペースを削り、後者は中身を4スペース下げます。
スペースとタブどちらを使うべき?
PEP8では半角スペース4つが推奨です。混在させると TabError になるため、エディタの「タブをスペースに変換」で統一してください。
インデントは何個が正解?
慣例は4スペースです。2でも動きますが、1ファイル内で統一することが重要です。
VSCodeでインデントエラーを防ぐには?
右下で「Spaces: 4」を選び、Convert Indentation to Spaces を実行。settings.jsonに "editor.insertSpaces": true と "editor.detectIndentation": false を設定すると常にスペースで統一されます。
TabError: inconsistent use of tabs and spaces とは?
同じブロック内でタブと半角スペースが混ざっているエラーです。見た目が揃っていても内部の文字が異なるため発生します。エディタの「タブをスペースに変換」機能でファイル全体を半角スペースに統一してください。
インデントが揃わないのはなぜ?
コピペや異なるエディタでの編集でタブとスペースが混在すると、表示上は揃っていても実際の字下げ幅がずれます。全選択して「インデントをスペースに変換」を実行するか、一度全て行頭の空白を削除して4スペースで書き直すと確実です。