【python】「IndentationError: unexpected indent」というエラー

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 levelTabErrorが出ることが多いですが、unexpected indentとして現れることもあります)

特に、複数の人が書いたコードを編集したり、異なるエディタを使ったりすると発生しやすいです。

「IndentationError: unexpected indent」の直し方【コピペで解決】

では、具体的な直し方を見ていきましょう。
ほとんどの場合、以下の方法で解決できます。

解決策1: 余計なインデントを削除する

最も単純な解決策です。
エラーメッセージに表示される「行番号」に注目し、その行の先頭に余計なスペースやタブが入っていないか確認してください。

手順:

  1. エラーメッセージ IndentationError: unexpected indent (line X)line X を確認します。
    • 例: IndentationError: unexpected indent (sample.py, line 3) なら、sample.pyファイルの3行目を確認します。
  2. その行の先頭にカーソルを合わせBackspaceキーを押して、余分なスペースやタブを削除します。
  3. もし、その行が何らかのブロック(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」を例に説明します。

  1. 問題のファイルを開く
  2. VS Codeの右下にあるステータスバーを見てください。ここに「Spaces: 4」や「Tab Size: 4」といった表示があるはずです。
    • もしここに「Mixed Indentations」と表示されていたら、スペースとタブが混在している証拠です。
  3. その表示をクリックすると、上部にメニューが出てきます。
    • Convert Indentation to Spaces」(インデントをスペースに変換)
    • Convert Indentation to Tabs」(インデントをタブに変換)
      といった選択肢があります。
  4. Pythonのスタイルガイド(PEP 8)ではスペース4個でインデントすることが推奨されているため、「Convert Indentation to Spaces」を選択し、必要であれば「Indent Using Spaces: 4」を選んでください。

VS Codeのインデント変換機能のイメージ
(※↑画像はイメージです。実際にはVS Codeで「Convert Indentation to Spaces」を選ぶと、ファイル内のインデントが全てスペースに統一されます。)

この機能を使えば、手動で一箇所ずつ直す手間を省き、一瞬でインデントを統一できます。
これぞ業務効率化!

まとめ

「IndentationError: unexpected indent」は、Pythonのインデントルールに関するエラーです。
初心者の方にとっては躓きやすいポイントですが、原因は大きく分けて以下の2つ。

  1. 必要のない場所で字下げをしている(余計なインデント)
  2. スペースとタブが混じっている

そして、解決策は以下の通りでした。

  1. エラーの行番号を確認し、余計なインデントを削除する。
  2. コードエディタの機能を使って、スペースとタブを統一する。(VS Codeの「Convert Indentation to Spaces」など)

焦らず、エラーメッセージの行番号を確認し、上記のどちらかの方法で対処すれば、ほとんどのエラーは解決します。
Pythonのインデントルールは最初はとっつきにくいかもしれませんが、慣れてしまえばコードが読みやすくなるメリットもたくさんあります。

この解説が、あなたのエラー解決の一助となれば幸いです!
サクッと直して、快適なPythonライフを送りましょう!

コメント

タイトルとURLをコピーしました