Python
 Computer >> コンピューター >  >> プログラミング >> Python

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のプロのように、このエラーを自信を持って修正できるはずです!

  1. Google ColaboratoryでPythonコードを実行する方法を徹底解説

    Google Colaboratory(通称:Colab)は、面倒なセットアップ不要でブラウザ上ですぐに使える、無料のクラウド型Jupyterノートブック環境です。Googleのクラウド上でホストされており、Pythonスクリプトをクラウド環境で実行・テストしたい開発者のためにGoogleが提供・運用しています。本記事では、Google Colaboratoryの環境を立ち上げてから、実際にPythonコードを記述・実行するまでの一連の手順を、初心者の方にもわかりやすく解説します。1. Pythonノートブックを開くまず、Google Colabの公式サイト(https://colab.res

  2. Pythonコードを高速化する11の最適化テクニック

    Pythonはコンパイル言語ほど高速ではないことは周知の事実ですが、大手企業がPythonで大規模なワークロードを処理している事例からも分かるように、決して「遅い言語」ではありません。この記事では、正しく動作するPythonプログラムをさらに速く、効率的にするために押さえておきたい最適化のヒントを11個紹介します。 ヒント1: 組み込み関数を活用する Pythonで独自に効率的なコードを書くことも可能ですが、C言語で実装された組み込み関数の速度には到底及びません。利用可能な組み込み関数はdir(__builtins__)で一覧表示できるので、車輪の再発明をする前に必ず確認しましょう。 ヒン