Python で複雑なコードを書いていると以下のエラーに遭遇することがあります。
IndentationError: expected an indented block
もしくは
IndentationError: expected an indented block after 'xxxx' statement on line XXX
これはインデント(字下げ)が不適切であるエラーです。
RubyやJavaなど、他の多くの言語ではインデントは見た目の問題であり、読みやすくする目的より多くの意味を持ちません。一方でPythonではインデントが文法上重要な意味を持ちます。
その理由としてはプログラムの見通しの良さを向上させるためや、コーディングスタイルの差異を生まないためなど、複数あります。
この対処には、必要な個所でインデントを文法に合わせて適切な状態に書き換えることが必要です。基本的にはエラー分に記載されている line XX の指示に従い、XX行目付近を確認することで、不適切な個所が見つかる場合がほとんどです。
また、エラーが発生しうる個所は様々ですが、以下がよくあるケースです。
具体例① if, else
if, else を用いている以下のプログラムでは、表題のエラーが発生します。
number = 10
if number > 10:
print('foo')
print('bar')
else:
print('bar')
これは、if や else の直後にインデント(字下げ)が無いためエラーとなります。以下のようにインデントを加えましょう。
number = 10
if number > 10:
print('foo')
print('bar')
else:
print('bar')
以下のようにインデントの際の半角スペースの数がずれている場合もエラーとなります。きちんと半角スペースの数は統一しましょう。
number = 10
if number > 10:
print('foo')
print('bar') # 半角スペース一個分ずれている!
else:
print('bar')
具体例② for
for を用いている以下のプログラムでは、表題のエラーが発生します。
for i in range(5):
print(i)
これも if の例と同様であり、forの直後にインデントが無いためエラーとなります。以下のようにインデントを加えましょう。
for i in range(5):
print(i)
具体例③ 関数( def xxx(): )
関数を定義している以下のプログラムでも、表題のエラーが発生します。
def print_foo():
print('foo')
print('bar')
これも上記の2つ例と同様であり、def の行の直後にインデントが無いためエラーとなります。以下のようにインデントを加えましょう。
def print_foo():
print('foo')
print('bar')
なお、この際に print(‘bar’) は関数の中に含めたくない場合は、以下のようにそのインデントはしないようにしましょう。
def print_foo():
print('foo')
print('bar')
これは if や for でも同様の事が言えます。どこからどこまでを if や for、関数としたいのか、を意識してインデントを加えましょう。
まとめ
本記事では IndentationError: expected an indented block のエラーの原因とその対処法の例をまとめました。
Pythonにおいてインデント(字下げ)は文法上、重要な要素です!どこからどこまで、を意識しながら適切にインデントを加えましょう!
処理のかたまりを意識して、きれいなインデントを心がけよう!
コメント