IndentationError: expected an indented block とは
Pythonプログラミングにおいて「IndentationError: expected an indented block」は非常によく遭遇するエラーです。このエラーは、コードブロックが期待されるインデント(字下げ)を持っていない場合に発生します。Pythonはインデントを使ってコードの構造を定義するため、このエラーは文法上の問題を示しています。
エラーの発生パターン
このエラーは主に以下のようなケースで発生します。
パターン1: Missing Indentation after a Block Statement
def my_function():
print("Hello") # インデントが足りない
def, if, for, whileなどのブロックを定義するステートメントの後は、必ずインデントされたコードブロックが続く必要があります。この例ではprint("Hello")がインデントされていません。
def my_function():
print("Hello") # 適切にインデント
パターン2: Empty Block without pass
if True:
# 何もしないつもりだが、インデントされた行がない
ブロックステートメントの後にコードがない場合でも、Pythonは何らかのインデントされた内容を期待します。何もしないことを明示するにはpassステートメントを使用します。
if True:
pass # 何もしないことを明示
パターン3: Inconsistent Indentation (Tabs vs Spaces)
def calculate():
result = 10
print(result) # タブとスペースが混在
Pythonでは、一つのファイル内でタブとスペースを混在させることは推奨されません(通常はエラーとして扱われます)。ほとんどのIDEはタブをスペースに変換する設定を持っています。
def calculate():
result = 10
print(result) # 全てスペースでインデント
根本原因の特定方法
エラーメッセージには、問題が発生したファイル名と行番号が示されます。その行と、その直前のブロック定義(def, ifなど)の行を注意深く確認してください。特に、インデントレベルが視覚的に正しいか、タブとスペースが混在していないかをチェックしましょう。
def process_data(data):
if data:
# ここでIndentationErrorが発生する場合、
# 次の行が正しくインデントされているか確認
print("Data available")
else:
print("No data") # この行のインデントも確認
防止策とベストプラクティス
信頼できるIDE(VS Code, PyCharmなど)を使用し、インデントを自動的に処理する機能や、タブをスペースに変換する設定を有効にしましょう。また、Pythonのリンター(Flake8, Pylintなど)を導入することで、インデントエラーを早期に検出できます。
# IDEが自動でインデントしてくれる例
def example_function():
# カーソルをここに置きEnterを押すと、次の行が自動でインデントされる
print("Inside function")
よくある質問(FAQ)
-
QIndentationErrorはなぜPython特有のエラーなのですか?
-
A
Pythonはコードブロックの構造をインデントによって定義する数少ない言語の一つだからです。他の多くの言語では、ブレース(
{})やキーワード(end)を使ってブロックを区切りますが、Pythonはインデントの深さに意味を持たせています。
-
Qタブとスペースの混在はどのように確認できますか?
-
A
多くのIDEには、空白文字を表示する機能があります(例: VS Codeの「Render Whitespace」)。これにより、タブとスペースの違いを視覚的に確認できます。また、
flake8などのリンターもこの問題を検出します。
-
Q空のコードブロックが必要な場合はどうすれば良いですか?
-
A
コードブロックが意図的に空である場合は、
passステートメントを使用します。passは何もしないヌル操作で、Pythonに「このブロックは意図的に空である」と伝えます。




コメント