PythonのIndentationErrorとは?意味・原因・直し方を初心者向けに解説

ながみえ

Pythonでコードを書いていると、IndentationErrorというエラーが表示されることがあります。

IndentationErrorは、インデントの位置が正しくないときに発生するエラーです。インデントとは、行の先頭に入れるスペースやタブによる字下げのことです。

Pythonでは、if文、for文、while文、関数などの中にある処理をインデントで表します。そのため、インデントが足りなかったり、余計に入っていたり、同じまとまりの中で位置がずれていたりすると、Pythonはコードを正しく読み取れません。

特に初心者のうちは、if文の次の行をインデントし忘れたり、コピーしたコードのスペースがずれていたりして、IndentationErrorにつまずくことがあります。

この記事では、PythonのIndentationErrorの意味、よくある原因、エラー例、修正例、確認ポイントを初心者向けに解説します。

Pythonでよく出るエラーを一覧で確認したい方は、「Pythonエラー一覧」も参考にしてください↓↓

あわせて読みたい
Pythonエラー一覧|よくあるエラーの意味・原因・直し方
Pythonエラー一覧|よくあるエラーの意味・原因・直し方
あわせて読みたい
【完全無料】Python初心者向け完全ガイド
【完全無料】Python初心者向け完全ガイド

IndentationErrorとは

IndentationErrorは、Pythonのインデントが正しくないときに発生するエラーです。

「Indentation」は「字下げ」や「インデント」という意味です。
つまり、IndentationErrorは簡単に言うと「行の先頭のスペースやタブの位置が正しくありません」というエラーです。

Pythonでは、処理のまとまりをインデントで表します。たとえば、if文の条件に当てはまったときに実行する処理は、次の行を字下げして書きます。

age = 18

if age >= 18:
    print("大人です")

このコードでは、print("大人です") の行がインデントされています。これにより、Pythonは「このprint文はif文の中の処理だ」と判断できます。

一方で、次のようにインデントがない場合は、IndentationErrorが発生します。

age = 18

if age >= 18:
print("大人です")

このコードでは、if文の次の行にインデントがありません。Pythonは、if age >= 18: のあとに実行する処理があるはずだと考えますが、次の行が字下げされていないため、処理のまとまりを判断できません。

修正するには、if文の中で実行したい処理をインデントします。

age = 18

if age >= 18:
    print("大人です")

このように、IndentationErrorはコードの内容そのものよりも、行頭のスペースやタブの位置に問題があるときに出るエラーです。

Pythonではインデントが見た目を整えるためだけのものではなく、文法の一部として扱われます。ほかの言語では波カッコ {} などで処理のまとまりを表すことがありますが、Pythonではインデントによって処理の範囲を表します。

そのため、インデントが1か所ずれているだけでも、Pythonはコードを正しく読み取れなくなることがあります。

最初のうちは少し細かく感じるかもしれませんが、IndentationErrorは原因を順番に確認すれば直しやすいエラーです。まずは「Pythonではインデントが処理のまとまりを表している」と覚えておきましょう。

IndentationErrorが起きる主な原因

IndentationErrorが起きる原因はいくつかあります。特に初心者の場合は、if文やfor文の次の行をインデントし忘れたり、同じ処理のまとまりの中でインデントの位置がずれていたりするケースが多いです。

よくある原因を整理すると、次のようになります。

原因内容確認すること
インデントが足りないif文、for文、while文、def文などの中の処理が字下げされていないコロンの次の行がインデントされているか
余計なインデントがある必要ない場所で行頭にスペースやタブが入っているその行が何かの処理ブロックに入っているか
インデントの幅がそろっていない同じまとまりの中で、行ごとの字下げ位置がずれている同じ階層の行が同じ位置にそろっているか
タブとスペースが混在している見た目はそろっていても、タブとスペースが混ざっているエディタで空白文字を表示して確認する
コロンの後の処理がないif文や関数定義の後に、実行する処理が書かれていない必要な処理を書くか、何もしない場合は pass を書く
コピーしたコードの空白がずれているWebサイトや資料からコピーしたときに、インデントが崩れている貼り付け後に行頭のスペースを確認する

Pythonでは、インデントが処理のまとまりを表します。そのため、見た目を整えるためだけにスペースを入れるのではなく、「どの処理がどのブロックに入っているか」を示すためにインデントを使います。

たとえば、if文の中で実行したい処理は、if文の次の行でインデントして書きます。for文の中で繰り返したい処理も、同じようにインデントが必要です。

一方で、if文やfor文の中ではない普通の処理に、余計なインデントを入れるとエラーになることがあります。Pythonは行頭のスペースを見て処理のまとまりを判断するため、必要のない字下げがあると「なぜここでインデントされているのか」と判断できなくなります。

また、同じ処理のまとまりでは、インデントの幅をそろえることも大切です。ある行はスペース4つ、別の行はスペース2つのようにずれていると、Pythonが同じブロックとして読み取れないことがあります。

IndentationErrorが出たときは、まずコロンの次の行を確認しましょう。次に、同じまとまりの行が同じ位置にそろっているか、余計なインデントが入っていないかを見直すと、原因を見つけやすくなります。

IndentationErrorのエラー例と修正例

ここからは、IndentationErrorが発生する具体的なコード例と、その修正例を見ていきます。

IndentationErrorは、行頭のスペースやタブの位置が正しくないときに発生します。原因を見つけるときは、「どの行がどの処理の中に入るのか」を意識すると分かりやすいです。

if文の中をインデントしていない場合

Pythonでは、if文の条件に当てはまったときに実行する処理を、次の行でインデントして書きます。

次のコードでは、if文の中で実行したい print("大人です") がインデントされていないため、IndentationErrorが発生します。

age = 18

if age >= 18:
print("大人です")

このコードでは、if age >= 18: のあとに処理が続くはずですが、次の行が字下げされていません。そのため、Pythonはif文の中身を判断できません。

修正するには、if文の中で実行したい処理をインデントします。

age = 18

if age >= 18:
    print("大人です")

if文の最後にコロンを書いたら、次の行はインデントして書くと覚えておくと分かりやすいです。

for文の中をインデントしていない場合

for文でも、繰り返し実行したい処理はインデントして書きます。

次のコードでは、for文の中で実行する print(i) がインデントされていません。

for i in range(3):
print(i)

このコードでは、for i in range(3): のあとに繰り返す処理が必要です。しかし、次の行が字下げされていないため、Pythonはfor文の中身を読み取れません。

修正するには、繰り返したい処理をインデントします。

for i in range(3):
    print(i)

このように書くと、print(i) がfor文の中の処理として扱われます。そのため、0、1、2が順番に表示されます。

関数の中をインデントしていない場合

関数を定義するときも、関数の中で実行する処理はインデントして書く必要があります。

次のコードでは、def greet(): のあとにある処理がインデントされていません。

def greet():
print("こんにちは")

greet()

このコードでは、def greet(): のあとに関数の中身が必要です。しかし、print("こんにちは") が字下げされていないため、Pythonは関数の中の処理を判断できません。

修正するには、関数の中で実行したい処理をインデントします。

def greet():
    print("こんにちは")

greet()

関数では、def の行の最後にコロンを書き、その次の行から関数の中身をインデントして書きます。

余計なインデントが入っている場合

インデントは必要な場所にだけ入れます。if文やfor文、関数などの中ではない普通の処理に余計なインデントを入れると、IndentationErrorになることがあります。

次のコードでは、2行目の print(name) に余計なインデントが入っています。

name = "太郎"
    print(name)

このコードでは、print(name) はif文やfor文などの中にあるわけではありません。それなのに行頭にスペースが入っているため、Pythonは「なぜここで字下げされているのか」を判断できません。

修正するには、不要なインデントを削除します。

name = "太郎"
print(name)

何かの処理ブロックに入っていない行は、基本的に左端から書きます。

同じブロック内でインデント幅がそろっていない場合

同じ処理のまとまりに入る行は、インデントの位置をそろえる必要があります。

次のコードでは、if文の中にある2つのprint文のインデント幅がそろっていません。

score = 80

if score >= 60:
    print("合格です")
  print("よくできました")

このコードでは、どちらのprint文もif文の中で実行したい処理です。しかし、1つ目のprint文と2つ目のprint文で、行頭のスペース数が違っています。

修正するには、同じブロック内の行を同じ位置にそろえます。

score = 80

if score >= 60:
    print("合格です")
    print("よくできました")

同じif文の中にある処理は、同じ深さでインデントします。最初のうちは、スペース4つでそろえると分かりやすいです。

タブとスペースが混在している場合

見た目ではインデントがそろっているように見えても、タブとスペースが混ざっているとエラーになることがあります。

たとえば、ある行はスペース4つでインデントし、別の行はTabキーでインデントしている場合、エディタ上では同じ位置に見えることがあります。しかし、Pythonから見ると、タブとスペースは別の文字です。

この場合、次のようなエラーが表示されることがあります。

TabError: inconsistent use of tabs and spaces in indentation

このエラーは、インデントにタブとスペースが混在しているという意味です。

修正するには、インデントをスペースに統一します。多くのコードエディタでは、Tabキーを押したときにスペースへ変換する設定ができます。

Pythonでは、インデントにスペース4つを使う書き方がよく使われます。初心者のうちは、タブとスペースを混ぜず、スペースで統一するとトラブルを減らしやすいです。

コロンの後に処理を書いていない場合

if文やfor文、関数定義などでコロンを書いた場合、そのあとには処理を書く必要があります。

次のコードでは、if文のあとに何も処理が書かれていません。

age = 18

if age >= 18:

このコードでは、if age >= 18: の条件に当てはまったときに、何を実行するのかが書かれていません。そのため、Pythonは処理のまとまりを作ることができません。

修正するには、if文の中に実行する処理を書きます。

age = 18

if age >= 18:
    print("大人です")

まだ処理の内容を決めていない場合は、pass を使うこともできます。

age = 18

if age >= 18:
    pass

pass は「何もしない」という意味の文です。あとで処理を書く予定だけれど、今は空にしておきたい場合に使えます。

IndentationErrorでよく見るメッセージ

IndentationErrorには、いくつかの代表的なエラーメッセージがあります。

英語のメッセージを見ると難しく感じるかもしれませんが、よく出る表現の意味を知っておくと、どこを確認すればよいか分かりやすくなります。

エラーメッセージ意味よくある原因確認すること
IndentationError: expected an indented blockインデントされた処理が必要if文、for文、def文などの次の行が字下げされていないコロンの次の行
IndentationError: unexpected indent予期しないインデントがある必要ない場所で字下げしているその行を左に戻す必要があるか
IndentationError: unindent does not match any outer indentation levelインデントの戻し方が合っていないインデント幅の不一致、タブとスペースの混在同じ階層のインデント幅
TabError: inconsistent use of tabs and spaces in indentationタブとスペースが混在しているタブとスペースを混ぜてインデントしている空白文字の種類を統一する

たとえば、次のようなメッセージが表示された場合を考えてみましょう。

IndentationError: expected an indented block

これは、「ここにはインデントされた処理が必要です」という意味です。多くの場合、if文、for文、while文、def文などのあとに、字下げされた処理を書いていないときに表示されます。

次のコードでは、if文の次の行がインデントされていません。

score = 80

if score >= 60:
print("合格です")

修正するには、if文の中で実行したい処理をインデントします。

score = 80

if score >= 60:
    print("合格です")

次に、次のようなメッセージが表示された場合を見てみましょう。

IndentationError: unexpected indent

これは、「予期しないインデントがあります」という意味です。つまり、本来インデントする必要がない場所で、行頭にスペースやタブが入っている状態です。

次のコードでは、2行目に余計なインデントがあります。

name = "花子"
    print(name)

この場合、print(name) はif文やfor文などの中にある処理ではありません。そのため、左端にそろえて書く必要があります。

name = "花子"
print(name)

また、次のようなメッセージが出ることもあります。

IndentationError: unindent does not match any outer indentation level

これは、インデントの戻し方や幅が合っていないときに表示されることがあります。たとえば、同じ処理のまとまりの中で、ある行はスペース4つ、別の行はスペース2つのようにずれている場合です。

次のコードでは、if文の中にある2つのprint文のインデント幅がそろっていません。

score = 80

if score >= 60:
    print("合格です")
  print("次も頑張りましょう")

修正するには、同じまとまりの処理を同じ位置にそろえます。

score = 80

if score >= 60:
    print("合格です")
    print("次も頑張りましょう")

さらに、タブとスペースが混ざっている場合は、次のようなエラーが表示されることがあります。

TabError: inconsistent use of tabs and spaces in indentation

TabErrorは、IndentationErrorに関連するエラーです。見た目ではインデントがそろっているように見えても、タブとスペースが混ざっていると、Pythonが正しく判断できないことがあります。

この場合は、コードエディタの設定でインデントをスペースに統一しましょう。初心者のうちは、スペース4つでインデントする設定にしておくと、エラーを防ぎやすくなります。

IndentationErrorのメッセージは、最初は読みづらく感じるかもしれません。

ただ、expected an indented block が出たらインデント不足、unexpected indent が出たら余計なインデント、unindent does not match が出たらインデント幅のずれを疑うと、原因を見つけやすくなります。

IndentationErrorが出たときの確認ポイント

IndentationErrorが出たときは、エラーが表示された行だけでなく、その前後の行も確認しましょう。

特に、if文、for文、while文、def文などのように、行の最後にコロンがある場合は、その次の行にインデントが必要になることが多いです。エラーの原因が、表示された行そのものではなく、1つ前の行にあることもあります。

IndentationErrorが出たときは、次の点を順番に確認してみてください。

  1. if文、for文、while文、def文などの次の行がインデントされているか
  2. 同じ処理のまとまりにある行のインデント幅がそろっているか
  3. 必要ない場所に余計なインデントが入っていないか
  4. タブとスペースが混ざっていないか
  5. コロンを書いたあとに、実行する処理を書いているか
  6. 何も処理を書かない場合に pass を入れているか
  7. コピーしたコードの行頭のスペースが崩れていないか
  8. エディタの自動整形や空白文字の表示を使って確認したか

たとえば、次のようなコードでは、if文の次の行がインデントされていません。

age = 18

if age >= 18:
print("大人です")

この場合は、print("大人です") をif文の中の処理として書きたいので、次のようにインデントします。

age = 18

if age >= 18:
    print("大人です")

また、次のように余計なインデントが入っている場合も、IndentationErrorになることがあります。

name = "太郎"
    print(name)

このコードでは、print(name) はif文やfor文などの中にあるわけではありません。そのため、行頭の余計なスペースを削除します。

name = "太郎"
print(name)

IndentationErrorを確認するときは、「この行はどの処理の中に入っているのか」を考えると分かりやすいです。

if文やfor文の中にある処理ならインデントします。一方で、どの処理ブロックにも入っていない行なら、左端から書きます。

それでも原因が分からない場合は、タブとスペースが混ざっていないかを確認しましょう。見た目ではそろっているように見えても、内部的には違う空白文字になっていることがあります。コードエディタで空白文字を表示したり、自動整形を使ったりすると、原因を見つけやすくなります。

最初のうちは、インデントの位置を意識するのが少し大変かもしれません。まずは、コロンの次の行、同じまとまりの行、余計な字下げの3つを順番に確認することから始めましょう。

IndentationErrorに関するよくある質問

ここでは、PythonのIndentationErrorについて、初心者が疑問に感じやすいポイントをQ&A形式で整理します。

エラーメッセージの意味や、インデントをそろえているつもりなのにエラーが出る場合の確認方法を知っておくと、実際にエラーが出たときにも落ち着いて対応しやすくなります。

IndentationError: expected an indented blockとはどういう意味ですか?

IndentationError: expected an indented block は、「インデントされた処理が必要です」という意味です。

多くの場合、if文、for文、while文、def文などのあとに、字下げされた処理を書いていないときに表示されます。

たとえば、次のコードではif文の次の行がインデントされていません。

age = 18

if age >= 18:
print("大人です")

この場合、print("大人です") はif文の中で実行したい処理なので、次のようにインデントします。

age = 18

if age >= 18:
    print("大人です")

コロンを書いた行の次には、基本的にインデントされた処理が必要だと覚えておくと分かりやすいです。

IndentationError: unexpected indentとはどういう意味ですか?

IndentationError: unexpected indent は、「予期しないインデントがあります」という意味です。

つまり、本来は字下げする必要がない場所に、余計なスペースやタブが入っている状態です。

たとえば、次のコードでは2行目に余計なインデントがあります。

name = "太郎"
    print(name)

このコードでは、print(name) はif文やfor文などの中にある処理ではありません。そのため、左端にそろえて書きます。

name = "太郎"
print(name)

このエラーが出たときは、その行が本当に何かの処理ブロックの中にあるのかを確認しましょう。

タブとスペースはどちらを使えばよいですか?

Pythonでは、インデントをスペースで統一するのがおすすめです。

特に初心者のうちは、スペース4つでインデントする形にそろえると分かりやすいです。タブとスペースを混ぜて使うと、見た目ではそろっているように見えても、Pythonが正しく判断できないことがあります。

タブとスペースが混ざっている場合は、次のようなエラーが出ることがあります。

TabError: inconsistent use of tabs and spaces in indentation

このエラーが出た場合は、コードエディタの設定を確認し、インデントをスペースに統一しましょう。多くのエディタでは、Tabキーを押したときにスペースへ変換する設定ができます。

インデントをそろえているのにエラーが出るのはなぜですか?

見た目ではそろっているように見えても、実際にはタブとスペースが混ざっている可能性があります。

また、同じブロック内でスペースの数が微妙に違っている場合もあります。たとえば、ある行はスペース4つ、別の行はスペース2つになっていると、Pythonが同じ処理のまとまりとして判断できないことがあります。

次のコードでは、2つのprint文のインデント幅がそろっていません。

score = 80

if score >= 60:
    print("合格です")
  print("次も頑張りましょう")

修正するには、同じブロック内の行を同じ位置にそろえます。

score = 80

if score >= 60:
    print("合格です")
    print("次も頑張りましょう")

原因が見つからないときは、エディタで空白文字を表示したり、自動整形を使ったりすると確認しやすくなります。

何も処理を書かない場合はどうすればよいですか?

if文や関数などの中に、まだ処理を書かない場合は pass を使います。

pass は「何もしない」という意味の文です。あとで処理を書く予定だけれど、今は空にしておきたいときに使えます。

たとえば、次のコードではif文の中に処理がないため、エラーになります。

age = 18

if age >= 18:

このような場合は、次のように pass を書きます。

age = 18

if age >= 18:
    pass

pass を書いておけば、Pythonは「ここには何もしない処理がある」と判断できます。学習中にコードの形だけ先に作りたいときにも便利です。

まとめ|IndentationErrorはインデントの位置を順番に確認しよう

IndentationErrorは、Pythonのインデントが正しくないときに発生するエラーです。

Pythonでは、if文、for文、while文、関数などの中にある処理をインデントで表します。そのため、インデントが足りなかったり、余計に入っていたり、同じまとまりの中で位置がずれていたりすると、Pythonがコードを正しく読み取れなくなります。

エラーが出たときは、コロンの次の行、同じ処理のまとまり、余計なインデント、タブとスペースの混在を順番に確認しましょう。

Pythonでよく出るエラーをまとめて確認したい方は、「Pythonエラー一覧」も参考にしてください↓↓

あわせて読みたい
Pythonエラー一覧|よくあるエラーの意味・原因・直し方
Pythonエラー一覧|よくあるエラーの意味・原因・直し方
あわせて読みたい
【完全無料】Python初心者向け完全ガイド
【完全無料】Python初心者向け完全ガイド

記事URLをコピーしました