Pythonコードで「IndentationError: 期待されたインデントされたブロック」エラーを修正する方法

インデントはPythonの可読性と保守性を維持する上で基本的な要素です。Pythonではインデントに関する厳格なルールが適用されており、その結果、開発者は不適切なインデントのコードで作業する際に「IndentationError: 期待されたインデントされたブロック」というエラーが発生することがあります。

Pythonのインデントエラーは、「IndentationError: 期待されたインデントされたブロック after 'for' statement」のようにさまざまな形式で発生することがあります。これはforループの後に不適切なインデントがあることを意味します。

PythonでIndentationErrorが発生する理由

「IndentationError: 期待されたインデントされたブロック」は、開発者が、特にPythonを始めたばかりの人や他のプログラミング言語から移行している人に発生する一般的なエラーです。

このエラーは、Pythonではコードをブロックでインデントすることが求められるために頻繁に発生します。言い換えると、if文、関数、クラス、ループなどのPythonコードブロックをインデントしないと、Pythonで「IndentationError」が発生します。

Pythonは、不適切にインデントされたコードブロックごとにわずかに異なるエラーメッセージを出力します。

「IndentationError: 期待されたインデントされたブロック」エラーを修正する方法

PythonでIndentationErrorを修正する最も簡単な方法は、コードをブロックでインデントすることです。不適切な書式のコードブロックの例を次に示します。

fname = "Gaurav"
lname = "Siyal"
if fname == "Gaurav" and lname == "Siyal":
print("You're Gaurav")
else:
print("You're somebody else")

このコードを実行すると、次のエラーが返されます。

File "tmp.py", line 5
print("You're Gaurav")
^
IndentationError: expected an indented block after 'if' statement on line 4

「IndentationError expected an indented block」を解決するには、コードブロックを正しくインデントする必要があります。コードをデバッグするには、次の手順に従います。

  1. エラーメッセージで指定されているコード行を特定し、そこに if文 があることを確認します。
  2. 次に、通常コードブロックを示すコロン(:)記号の後に適切なインデントがあるかどうかを確認します。ない場合は、適切なインデントを追加してエラーを修正します。
  3. 適切なインデントを追加するには、一定のスペースまたはタブの量を選択する必要があります。Pythonでさらにインデントエラーが発生するのを防ぐために、両方を混在させないでください。常にタブを使用することをお勧めします。

次のコードは、タブを使用して修正されたインデントを示しています。

fname = "Gaurav"
lname = "Siyal"
if fname == "Gaurav" and lname == "Siyal":
print("You're Gaurav")
else:
print("You're somebody else")

場合によっては、「IndentationError: 予期しないインデント」というエラーが表示されます。このエラーは、Pythonコードを間違った場所にインデントしたことを意味します。簡単な例を次に示します。

num = 5
num += 2

上記のコードは「IndentationError: 予期しないインデント」エラーメッセージを返します。これは、作業にインデントがある可能性があるものの、Pythonコードブロック内にはないことを意味します。これを修正するには、次のように不要なインデントを削除します。

num = 5
num += 2

エディタの適切なインデントを確保する

ほとんどの最新のテキストエディタは、自動コードインデントをサポートしています。エディタがコード行をインデントする必要があると判断すると、タブまたはスペースが自動的に追加されます。

たとえば、最も人気のあるPython IDEの1つであるSpyderコードエディタでは、ツール > 環境設定 > ソースコード でインデントオプションにアクセスできます。

Vimを使用している場合は、設定を編集して autoindent および関連オプションを使用してインデントを構成できます。たとえば、一般的な設定を次に示します。

set autoindent
set expandtab
set tabstop=4
set softtabstop=4
set shiftwidth=4

これにより、4つのスペースを使用して自動的にインデントされます。

ほとんどの最新のテキストエディタは自動コードインデントをサポートしていますが、開発者は、一部のケースでは不明瞭な場合がありますので注意する必要があります。チーム全体でコードの可読性と一貫性を保つために、適切なインデントが不可欠です。

上の画像では、最後の return 文は、最初の行の関数シグネチャから1レベルインデントされています。ただし、カーソルを2番目の行の最後に配置して Enter を押すと、2つのことが起こる可能性があります。エディタは、カーソルを次のように配置できます。

  1. 「res =...」に揃えられた2つのインデントレベル
  2. 「else:」に揃えられた1つのインデントレベル

エディタは、これらの2つのケースを区別できません。if/elseブロックにさらにコードを追加する場合と、追加しない場合があります。

不適切なインデントの一般的なケース

if文

if文を正しくインデントしないと、「IndentationError: 期待されたインデントされたブロック after 'if' statement」というエラーメッセージが表示されます。適切にインデントされたif文の例を次に示します。

if my_name == "Gaurav":
print("My name is Gaurav")

関数

関数は宣言の直後にインデントが必要です。このルールを無視すると「IndentationError: 関数の定義の後にインデントされたブロックが期待されています」というエラーメッセージが表示されます。これを避けるには、常に次のように関数を適切にインデントしてください。

def magic_number():
result = 42
return result
print magic_number()

forループ

forループは、コードブロックを適切にインデントしない場合、一般的に「IndentationError: 'for'文の後にインデントされたブロックが期待されています」というエラーメッセージが表示されます。これを防ぐには、コーディング時に一般的にこのインデント形式に従う必要があります。

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

インデントされていないdocstring

十分に文書化されたコードを維持するために、必要な場所にdocstringを追加することがあります。docstringが適切にインデントされていることを確認する必要があります。そうでないと、Pythonで「IndentationError expected an indented block」が発生します。コードが次のように適切にインデントされていることを常に確認してください。

def do_something():
"""this code does something"""
return True

Pythonの「インデントされたブロックが期待されています」エラーの処理

Pythonでは、他のプログラミング言語と同様に、エラーは日常的に発生します。インデントに関するPythonの厳格なルールは、考慮すべき新しい種類のエラーを追加する可能性がありますが、役立ちます。適切にインデントされたコードは、チーム全体で読みやすく、一貫性があります。

インデントエラーは、対処しなければならない唯一のエラーではありません。一般的なPythonのエラーに精通していると、それらをデバッグする方法と修正する方法がわかります。