PythonのIndentationError「unexpected indent」エラーの原因と解決方法を徹底解説
Pythonにおけるインデントには、2つの重要な役割があります。1つはコードの可読性を高めること、もう1つはPythonインタープリタがコードを正しく理解できるようにすることです。不要な場所に余分なスペースやタブを挿入すると、「IndentationError: unexpected indent」というエラーが発生します。
この記事では、このエラーの意味と発生原因を詳しく解説し、実際のコード例をもとに、プログラム内でエラーを修正する方法をわかりやすく説明します。
IndentationError: unexpected indent とは
インデントとは、特定のコードブロックに属する行であることを示すために付ける、一定数のスペースやタブのことです。以下のプログラムを見てみましょう。
def hello_world():
print("Hello, world!")
ここでは hello_world() という関数を1つ定義しています。この関数の中にはprint文が含まれており、この行が関数の一部であることをPythonに伝えるために、インデントを付けています。
インデントはスペースでもタブでも好みに応じて使用できます。ただし、インデントを付けるべきは、そのコードが別のコードブロックの一部である場合だけです。具体的には、以下のような場面でインデントが必要になります。
- if...else 文
- try...except 文
- for ループ
- 関数定義(def文)
特別な構文の中に記述されるPythonコードは、一貫したインデントが必須です。Pythonはインデントを厳格にチェックする言語だからです。
JavaScriptなど一部のプログラミング言語では、波括弧({})を使ってコードブロックを表すため、インデントは厳密には強制されません。しかしPythonにはその機能がないため、言語仕様としてインデントに大きく依存しています。
「IndentationError: unexpected indent」エラーの原因は、コードを必要以上に深くインデントしてしまったこと、つまり1行に対してタブやスペースを多用しすぎたことにあります。
また、インデント関連では以下のようなエラーに遭遇することもあります。
- Unindent does not match any other indentation level(インデントの解除レベルがどのレベルとも一致しない)
- Expected an indented block(インデントされたブロックが必要)
エラーが発生する具体例
ここでは、ユーザーの購入履歴リストをループ処理し、25.00ドルを超える購入額だけをコンソールに出力するプログラムを作成してみましょう。
まず、購入金額のリストを定義します。
purchases = [25.50, 29.90, 2.40, 57.60, 24.90, 1.55]
次に、リストをループ処理して、25ドルを超える購入額だけをコンソールに表示する関数を定義します。
def show_high_purchases(purchases):
for p in purchases:
if p > 25.00:
print("Purchase: ")
print(p)
show_high_purchases() 関数は引数として購入履歴のリストを受け取ります。関数はこのリストを反復処理し、if 文を使って各購入額が25.00ドルより大きいかどうかを判定します。
購入額が25.00ドルを超えていれば、まず「Purchase: 」という文字列がコンソールに出力され、続いてその購入金額が表示されます。それ以外の場合は何も起こりません。
コードを実行する前に、関数を呼び出して購入リストを引数として渡しましょう。
show_high_purchases(purchases)
それではコードを実行してみます。
File "main.py", line 7
print(p)
^
IndentationError: unexpected indent
残念ながら、コードは正常に実行されませんでした。
エラーの解決方法
Pythonのエラーに直面したときは、まずエラーメッセージ全体を丁寧に読むことが重要です。今回の問題は7行目、つまり購入金額を出力している箇所で発生しているようです。
if p > 25.00:
print("Purchase: ")
print(p)
よく見ると、2つ目の print() 文が誤って余分にインデントされています。この2つ目の print() 文は新しいコードブロックの一部ではなく、同じ if 文の一部であるため、エラーが発生してしまったのです。
このエラーを解決するには、すべての print() 文のインデントを揃える必要があります。
if p > 25.00:
print("Purchase: ")
print(p)
両方の print() 文は同じ if 文に属しているため、同じレベルのインデントを使用しなければなりません。上記のように修正しました。
それでは、再度コードを実行してみましょう。
Purchase:
25.5
Purchase:
29.9
Purchase:
57.6
今度は、25.00ドルを超えるすべての購入額がコンソールに正常に出力されました。
まとめ
「IndentationError: unexpected indent」は、コードの行を必要以上に深くインデントしたときに発生するエラーです。このエラーを解決するには、コード全体でインデントの一貫性を保ち、不要なインデントがないかを確認しましょう。
これで、あなたもPythonのプロのように、このエラーを自信を持って修正できるはずです!
-
Google ColaboratoryでPythonコードを実行する方法を徹底解説
Google Colaboratory(通称:Colab)は、面倒なセットアップ不要でブラウザ上ですぐに使える、無料のクラウド型Jupyterノートブック環境です。Googleのクラウド上でホストされており、Pythonスクリプトをクラウド環境で実行・テストしたい開発者のためにGoogleが提供・運用しています。本記事では、Google Colaboratoryの環境を立ち上げてから、実際にPythonコードを記述・実行するまでの一連の手順を、初心者の方にもわかりやすく解説します。1. Pythonノートブックを開くまず、Google Colabの公式サイト(https://colab.res
-
Pythonコードを高速化する11の最適化テクニック
Pythonはコンパイル言語ほど高速ではないことは周知の事実ですが、大手企業がPythonで大規模なワークロードを処理している事例からも分かるように、決して「遅い言語」ではありません。この記事では、正しく動作するPythonプログラムをさらに速く、効率的にするために押さえておきたい最適化のヒントを11個紹介します。 ヒント1: 組み込み関数を活用する Pythonで独自に効率的なコードを書くことも可能ですが、C言語で実装された組み込み関数の速度には到底及びません。利用可能な組み込み関数はdir(__builtins__)で一覧表示できるので、車輪の再発明をする前に必ず確認しましょう。 ヒン