Pythonの「IndentationError」が出たときの対処法
Pythonをブラウザで実行しながら実践的に学ぶ
Pythonの基礎からソフトウェアアーキテクチャ,アルゴリズムなどの応用的な内容まで幅広く学べます。
ブラウザ上で直接Pythonコードを試すことができ、実践的なスキルを身につけることが可能です。
Pythonを書いていて、こんなエラーを見たことはありませんか?
IndentationError: unexpected indent
あるいは、こんなもの。
IndentationError: expected an indented block
このエラー、Python初心者が最初の壁としてぶつかる定番中の定番です。 私もエンジニアになりたての頃、この「IndentationError」と何度も格闘しました。
「え、空白一個でエラー?!」と驚いたことを今でもよく覚えています。
この記事では、そんなPythonのインデント(indent)の仕組みと、IndentationErrorの原因と解決法を、できるだけやさしく、具体的なコード例とともに説明します。
そもそも「インデント」ってなに?¶
まず、インデントという言葉そのものがピンと来ない人も多いと思います。
日本語で言えば「字下げ」や「段落の最初の余白」といった意味です。文章を書くときに、段落の最初を1文字分下げることがありますよね?プログラミングでいうインデントもそれに似ています。
ただし、Pythonの場合はこの「字下げ」が見た目の整え方だけでなく、文法の一部になっているんです。
ここが他の言語(例えばJavaScriptやC言語など)と大きく違うところです。
Pythonはインデントで「どこまでが何の処理か」を判断している¶
他の言語では、処理のまとまり(ブロック)を {} で囲みます。でもPythonには {} がありません。その代わりに、インデント(スペースやタブの位置)で構造を表現します。
たとえば、if文を例に見てみましょう。
# Pythonのif文の例
x = 5
if x > 0:
    print("正の数です")
    print("xは", x, "です")
print("これはif文の外側の処理です")
このコードでは、if x > 0: の下に2行、インデントされた処理があります。
Pythonはこの「インデントされているかどうか」で、どこまでがif文の中かを判断します。
もしインデントを崩すと、Pythonはそれを理解できず、IndentationErrorを出します。
IndentationErrorとは何か?¶
「IndentationError」は、その名の通り「インデントのエラー」です。 つまり、コードのインデント(字下げ)が正しくないときに出るエラーです。
Pythonでは、インデントの段差=構造の境界なので、ここがズレていると「この行はどのブロックに属しているの?」とPythonが混乱します。
具体的なメッセージの種類は次のようなものがあります。
| エラーメッセージ | 意味 | 
|---|---|
IndentationError: unexpected indent | 
想定外のインデント(余分な字下げ)がある | 
IndentationError: expected an indented block | 
インデントが必要なのにされていない | 
IndentationError: unindent does not match any outer indentation level | 
インデントの深さが他の行と一致していない | 
TabError: inconsistent use of tabs and spaces in indentation | 
タブとスペースが混ざっている | 
これらを1つずつ、具体的な例を交えて見ていきましょう。
unexpected indent(予期しないインデント)¶
まず、最もよくあるのがこれです。
x = 10
 print(x)
このコードを実行すると、こんなエラーが出ます。
IndentationError: unexpected indent
原因は単純で、print(x)の前に余計なスペースがあるからです。
Pythonは「ここはインデントが必要な場所じゃないのに、なんで字下げしてるの?」と怒っているわけですね。
この場合は、余分なスペースを削除すれば解決します。
x = 10
print(x)
expected an indented block(インデントが必要なのにされていない)¶
次のパターンです。
x = 10
if x > 5:
print("大きい数です")
これを実行すると、
IndentationError: expected an indented block
というメッセージが出ます。
if x > 5: のあとに続く処理がインデントされていないため、Pythonが「if文の中身がどこ?」と混乱しています。
正しくは次のようにインデントします。
x = 10
if x > 5:
    print("大きい数です")
unindent does not match any outer indentation level(インデントの段差が合っていない)¶
このエラーは、見た目では分かりにくいけれども、かなり厄介です。 よくあるのは、インデントの深さを合わせ忘れるケースです。
def greet():
    print("こんにちは")
      print("元気ですか?")
    print("さようなら")
greet()
実行すると、こうなります。
IndentationError: unindent does not match any outer indentation level
ここでは、print("元気ですか?") の行だけインデントが2スペース深くなっているため、Pythonがブロックの整合性を取れなくなっています。
つまり、「この行の字下げは、どのブロックの一部?」と迷子になってしまうのです。
正しくはこうです。
def greet():
    print("こんにちは")
    print("元気ですか?")
    print("さようなら")
greet()
TabError: タブとスペースが混在している¶
これも初心者がよくハマるポイントです。
Pythonはインデントにタブ(\t)かスペース()を使うのですが、この2つが混ざると怒られます。
見た目では同じに見えても、Pythonから見ると別の文字です。
次のようなケースです。
def hello():
\tprint("Hello")  # タブ
    print("World")  # スペース
この場合、
TabError: inconsistent use of tabs and spaces in indentation
と出ます。
解決策は、インデントを統一することです。 Pythonの公式スタイルガイド「PEP8」では、スペース4つを推奨しています。
VS CodeやPyCharmなどのエディタでは、「インデントをスペース4つに統一する設定」ができるので、必ず設定しておくのがおすすめです。
私の体験談:インデントエラーで半日消えた話¶
私がPythonを始めた頃(もう10年近く前です)、初めて作ったのは簡単なファイル操作スクリプトでした。
でもなぜか動かない。しかもエラーの内容は「IndentationError」。
当時は「え?そんな細かいことで止まるの?」と本気で思いました。
原因は、「コピーしたコードにタブが混じっていた」こと。 インターネットの記事からコードを貼り付けたときに、エディタが自動でタブを挿入していたんです。
見た目は同じなのに、Pythonは厳密に区別している。 それを理解するのに半日かかりました。
この経験から学んだのは、「見た目が正しくても、エディタ設定を信じるな」ということです。 それ以降、私はすべてのプロジェクトで「タブ→スペースに自動変換」を有効にしています。
インデントを正しく扱うためのポイント¶
Pythonのインデントで迷わないために、日常的に気をつけておくべきポイントをまとめておきます。
| ポイント | 解説 | 
|---|---|
| スペース4つを使う | PEP8準拠。迷ったらこれ。 | 
| タブを使わない | 混ざるとエラーの原因になる。 | 
| 自動整形ツールを使う | black や autopep8 が便利。 | 
| コードをコピペしたら確認する | Web記事からの貼り付け時に注意。 | 
| チーム内でルールを統一する | エディタ設定を共有しておく。 | 
自動整形ツールで一発解決¶
もし大きなプロジェクトでインデントエラーが多発しているなら、手で直すよりも自動整形ツールを使うのが圧倒的に効率的です。
Pythonでは特に次の2つが人気です。
- black:構文を自動で整形する強力なツール。設定いらずで統一的なフォーマットにしてくれます。
 - autopep8:PEP8(Pythonの公式スタイルガイド)に沿って、自動でコードを修正します。
 
たとえば、blackを使うなら以下のように実行します。
pip install black
black my_script.py
これだけで、インデントのズレも含めてすべて統一されます。 初心者のうちは特に、こうしたツールを味方につけておくと心強いです。
まとめ:インデントはPythonの「文法そのもの」¶
IndentationErrorは、Pythonを学び始めた誰もが通る道です。 でもその仕組みを理解すれば、もう怖くありません。
インデントは単なる見た目の問題ではなく、Pythonの文法の一部。 だからこそ、きれいに書く習慣を身につけることが、エラーを防ぐ最も確実な方法です。
10年Pythonを書いてきた私でも、たまに「unexpected indent」と出ることがあります。
でもそのたびに、
「あぁ、また余計なスペースが入ったな」と笑って直せるようになりました。
焦らず、少しずつ、エラーの意味を読み解けるようになれば大丈夫。 そして、エディタ設定を整えて、自動整形ツールを活用すれば、インデントで悩む時間はほとんどなくなります。
インデントのエラーが出ないように、出てもすぐに解決できるようになっていきましょう! ここまでお読みいただきありがとうございました!