Pythonを書き始めたばかりの頃は特に、このエラーで何度も手が止まってしまいますよね。
「意図しない字下げエラー」 なんて言われても、どこが間違っているのかパッと見て分かりづらい。本当に面倒なエラーです。
でも、安心してください!
このエラーの原因はとても単純で、直し方もいくつかポイントを押さえれば簡単に解決できます。
業務効率化が得意な現役エンジニアである私が、コピペでサクッと解決できる方法を、初心者の方にも分かりやすく解説します。
サクッと直して、気持ちよく次の作業に進みましょう!
「IndentationError: unexpected indent」ってどんなエラー?
まず、このエラーメッセージが何を言っているのか、簡単に理解しておきましょう。
「IndentationError: unexpected indent」は直訳すると「インデントエラー:予期しない字下げ」となります。
Pythonというプログラミング言語には、「インデント(字下げ)」がプログラムの構造を表す上で非常に重要、という独特なルールがあります。
他の言語だと、波括弧 {} などを使って「ここまでが一つのまとまりだよ」と示しますが、Pythonではスペースやタブを使った字下げでそのまとまりを示します。
たとえば、if文やfor文、関数を定義するときなどに、その中身のコードは必ず一段階字下げする必要があります。
“`python
OKな例(正しくインデントされている)
if True:
print(“この行はif文の中身”) # if文の中なので字下げされている
print(“この行はif文の外”) # if文の外なので字下げされていない
“`
一方で、「unexpected indent」は、この「Pythonのインデントルール」に違反したときに発生します。
つまり、「本来字下げするべきではない場所で字下げしてしまっているよ!」という警告なんですね。
IndentationError: unexpected indent が発生しやすいパターン例:
python
print("この行は、何のまとまりでもないのに字下げされている") # ← これが原因!
「unexpected indent」の主な原因はこれ!
このエラーの主な原因は、以下の2つに絞られます。
原因1: 必要のない場所で字下げをしている(余計なインデント)
これが最も多いケースです。
例えば、ファイルの先頭や、前の行の処理とは関係ない行で、うっかりスペースやタブを挿入してしまっているパターンです。
間違ったコードの例:
python
print("あれ?なぜか先頭にスペースが入っちゃった") # ← ここに余計なインデントが!
if True:
print("この行は正しいインデント")
このコードを実行すると、print("あれ?なぜか先頭にスペースが入っちゃった") の行で「IndentationError: unexpected indent」が発生します。
Pythonは「このprintは何のブロック(ifとかforとか)の中にもないのに、なぜ字下げされてるの?」と疑問に思うわけです。
原因2: スペースとタブが混じっている
これは見た目では非常に分かりにくい、厄介な原因です。
Pythonでは、字下げに「スペース」を使うか「タブ」を使うか、どちらかに統一する必要があります。
スペースとタブは、見た目には同じ「空白」ですが、コンピュータにとっては全く異なる文字として扱われます。
- スペース: 半角スペースを複数個(通常は4個)使って字下げする。
- タブ: Tabキーを押して挿入される特殊な文字。
たとえば、ある行はスペース4個で字下げし、別の行はタブ1個で字下げしているような場合、Pythonはこれを「インデントのルールがバラバラだ!」と判断し、「IndentationError: unexpected indent」を出すことがあります。
(厳密にはIndentationError: unindent does not match any outer indentation levelやTabErrorが出ることが多いですが、unexpected indentとして現れることもあります)
特に、複数の人が書いたコードを編集したり、異なるエディタを使ったりすると発生しやすいです。
「IndentationError: unexpected indent」の直し方【コピペで解決】
では、具体的な直し方を見ていきましょう。
ほとんどの場合、以下の方法で解決できます。
解決策1: 余計なインデントを削除する
最も単純な解決策です。
エラーメッセージに表示される「行番号」に注目し、その行の先頭に余計なスペースやタブが入っていないか確認してください。
手順:
- エラーメッセージ
IndentationError: unexpected indent (line X)のline Xを確認します。- 例:
IndentationError: unexpected indent (sample.py, line 3)なら、sample.pyファイルの3行目を確認します。
- 例:
- その行の先頭にカーソルを合わせ、
Backspaceキーを押して、余分なスペースやタブを削除します。 - もし、その行が何らかのブロック(
if文やfor文など)の中にあるべきなのに、字下げが深すぎる場合は、Shift + Tabキー(エディタによってはTabキー)を押してインデントを浅く(左に移動)します。
間違ったコード:
“`python
sample.py
1: variable = 10
2: print(“この行はなぜか字下げされています”) # line 2 でエラー!
3: if variable > 5:
4: print(“変数の方が大きい”)
“`
修正後のコード:
“`python
sample.py
1: variable = 10
2: print(“この行はなぜか字下げされています”) # ← 先頭のスペースを削除
3: if variable > 5:
4: print(“変数の方が大きい”)
“`
解決策2: スペースとタブを統一する(エディタの機能が超便利!)
この問題は、手動で全ての空白を確認するのは非常に困難です。
ですので、お使いのコードエディタの機能を使うのが最も効率的で確実な方法です。
多くの高機能なエディタ(VS Code, PyCharm, Sublime Text など)には、インデントを自動でスペースに変換したり、タブに変換したりする機能が備わっています。
ここでは、多くの開発者に使われている「VS Code」を例に説明します。
- 問題のファイルを開く
- VS Codeの右下にあるステータスバーを見てください。ここに「Spaces: 4」や「Tab Size: 4」といった表示があるはずです。
- もしここに「Mixed Indentations」と表示されていたら、スペースとタブが混在している証拠です。
- その表示をクリックすると、上部にメニューが出てきます。
- 「Convert Indentation to Spaces」(インデントをスペースに変換)
- 「Convert Indentation to Tabs」(インデントをタブに変換)
といった選択肢があります。
- Pythonのスタイルガイド(PEP 8)ではスペース4個でインデントすることが推奨されているため、「Convert Indentation to Spaces」を選択し、必要であれば「Indent Using Spaces: 4」を選んでください。

(※↑画像はイメージです。実際にはVS Codeで「Convert Indentation to Spaces」を選ぶと、ファイル内のインデントが全てスペースに統一されます。)
この機能を使えば、手動で一箇所ずつ直す手間を省き、一瞬でインデントを統一できます。
これぞ業務効率化!
まとめ
「IndentationError: unexpected indent」は、Pythonのインデントルールに関するエラーです。
初心者の方にとっては躓きやすいポイントですが、原因は大きく分けて以下の2つ。
- 必要のない場所で字下げをしている(余計なインデント)
- スペースとタブが混じっている
そして、解決策は以下の通りでした。
- エラーの行番号を確認し、余計なインデントを削除する。
- コードエディタの機能を使って、スペースとタブを統一する。(VS Codeの「Convert Indentation to Spaces」など)
焦らず、エラーメッセージの行番号を確認し、上記のどちらかの方法で対処すれば、ほとんどのエラーは解決します。
Pythonのインデントルールは最初はとっつきにくいかもしれませんが、慣れてしまえばコードが読みやすくなるメリットもたくさんあります。
この解説が、あなたのエラー解決の一助となれば幸いです!
サクッと直して、快適なPythonライフを送りましょう!

コメント