【Python初心者必見】IndentationErrorの原因と解決法 – 完全攻略ガイド

フリーランスボード

20万件以上の案件から、副業に最適なリモート・週3〜の案件を一括検索できるプラットフォーム。プロフィール登録でAIスカウトが自動的にマッチング案件を提案。市場統計や単価相場、エージェントの口コミも無料で閲覧可能なため、本業を続けながら効率的に高単価の副業案件を探せます。フリーランスボード

ITプロパートナーズ

週2〜3日から働ける柔軟な案件が業界トップクラスの豊富さを誇るフリーランスエージェント。エンド直契約のため高単価で、週3日稼働でも十分な報酬を得られます。リモートや時間フレキシブルな案件も多数。スタートアップ・ベンチャー中心で、トレンド技術を使った魅力的な案件が揃っています。専属エージェントが案件紹介から契約交渉までサポート。利用企業2,000社以上の実績。ITプロパートナーズ

Midworks 10,000件以上の案件を保有し、週3日〜・フルリモートなど柔軟な働き方に対応。高単価案件が豊富で、報酬保障制度(60%)や保険料負担(50%)など正社員並みの手厚い福利厚生が特徴。通勤交通費(月3万円)、スキルアップ費用(月1万円)の支給に加え、リロクラブ・freeeが無料利用可能。非公開案件80%以上、支払いサイト20日で安心して稼働できます。Midworks

Pythonでプログラミングをしていると必ず遭遇する「IndentationError」。この記事では、IndentationErrorが発生する原因から具体的な解決方法まで、初心者にもわかりやすく徹底解説します。

IndentationErrorとは?

IndentationError(インデンテーションエラー)は、Pythonのコードにおける**インデント(字下げ)**が正しくない場合に発生するエラーです。Pythonは他の言語と異なり、波括弧({})ではなくインデントでコードブロックを表現するため、このエラーが頻繁に発生します。

よくあるIndentationErrorのパターン

1. expected an indented block

エラー例:

if True:
print("Hello")  # IndentationError: expected an indented block

解決法:

if True:
    print("Hello")  # 正しいインデント

2. unindent does not match any outer indentation level

エラー例:

if True:
    print("条件成立")
  print("終了")  # IndentationError: unindent does not match

解決法:

if True:
    print("条件成立")
print("終了")  # 正しいインデント

3. unexpected indent

エラー例:

print("開始")
    print("不正なインデント")  # IndentationError: unexpected indent

解決法:

print("開始")
print("正しいインデント")

IndentationErrorが発生する主な原因

1. スペースとタブの混在

問題のあるコード:

def my_function():
    x = 1  # スペース4個
	y = 2  # タブ文字(見た目は同じでもエラー)

解決法:

def my_function():
    x = 1  # 統一してスペース4個を使用
    y = 2

2. if文やfor文の後のインデント忘れ

エラー例:

for i in range(3):
print(i)  # IndentationError

解決法:

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

3. 関数定義でのインデント不足

エラー例:

def greet():
return "Hello"  # IndentationError

解決法:

def greet():
    return "Hello"

エディタ別の対処法

Visual Studio Code

  1. 設定でタブをスペースに変換:

    • Ctrl + , で設定を開く
    • “Tab Size” を 4 に設定
    • “Insert Spaces” をオンにする
  2. インデント表示:

    • Ctrl + Shift + P → “Toggle Render Whitespace”

PyCharm

  1. インデント設定:
    • File → Settings → Editor → Code Style → Python
    • “Use tab character” のチェックを外す
    • “Tab size” と “Indent” を 4 に設定

Sublime Text

{
    "tab_size": 4,
    "translate_tabs_to_spaces": true,
    "show_line_endings": true
}

IndentationErrorを防ぐベストプラクティス

1. 一貫したインデントルールを使用

# 推奨:スペース4個
def calculate_sum(numbers):
    total = 0
    for num in numbers:
        total += num
    return total

2. エディタの設定を統一

  • タブサイズ:4スペース
  • タブをスペースに変換:ON
  • 空白文字の表示:ON

3. コードフォーマッターを使用

# blackを使用した自動フォーマット
pip install black
black your_file.py

デバッグ方法

1. エラーメッセージを確認

IndentationError: expected an indented block (line 5)

エラーメッセージには行番号が表示されるため、該当行を確認しましょう。

2. 空白文字を可視化

# エディタで空白文字を表示して確認
def example():
····print("スペース4個")  # ·はスペースを表す
→   print("タブ文字")     # →はタブを表す

3. 段階的にコードを確認

# 最小限のコードから始める
if True:
    pass  # とりあえずpassで確認

よくある質問(FAQ)

Q: スペース何個でインデントすべきですか? A: PEP 8(Pythonの公式スタイルガイド)では4スペースを推奨しています。

Q: タブとスペースはどちらがいいですか? A: スペースを使用することを強く推奨します。環境によってタブの表示幅が異なるためです。

Q: 他の言語からPythonに移行する際の注意点は? A: 波括弧({})に慣れている場合、インデントでブロックを表現するPythonの記法に注意が必要です。

実践的な解決例

ネストした構造でのエラー

エラーコード:

for i in range(3):
    if i > 0:
print(i)  # どのブロックに属するか不明

修正コード:

for i in range(3):
    if i > 0:
        print(i)  # ifブロック内
    print(f"ループ{i}")  # forブロック内

関数定義でのエラー

エラーコード:

def process_data(data):
if data:
    return data * 2  # IndentationError

修正コード:

def process_data(data):
    if data:
        return data * 2
    return 0

自動化ツールの活用

pre-commitフックの設定

# .pre-commit-config.yaml
repos:
  - repo: https://github.com/psf/black
    rev: 22.10.0
    hooks:
      - id: black

flake8でのチェック

pip install flake8
flake8 your_file.py  # インデントエラーも検出

まとめ

IndentationErrorは以下のポイントを押さえることで確実に防げます:

  1. 一貫したインデントルールを使用する(スペース4個推奨)
  2. エディタの設定を適切に行う
  3. 自動フォーマッターを活用する
  4. 空白文字を可視化してデバッグする

Pythonの特性を理解し、適切なツールを使用することで、IndentationErrorに悩まされることなく効率的にプログラミングができるようになります。初心者の方も、この記事の内容を実践すれば必ず解決できるはずです。

「らくらくPython塾」が切り開く「呪文コーディング」とは?

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座

フリーランスボード

20万件以上の案件から、副業に最適なリモート・週3〜の案件を一括検索できるプラットフォーム。プロフィール登録でAIスカウトが自動的にマッチング案件を提案。市場統計や単価相場、エージェントの口コミも無料で閲覧可能なため、本業を続けながら効率的に高単価の副業案件を探せます。フリーランスボード

ITプロパートナーズ

週2〜3日から働ける柔軟な案件が業界トップクラスの豊富さを誇るフリーランスエージェント。エンド直契約のため高単価で、週3日稼働でも十分な報酬を得られます。リモートや時間フレキシブルな案件も多数。スタートアップ・ベンチャー中心で、トレンド技術を使った魅力的な案件が揃っています。専属エージェントが案件紹介から契約交渉までサポート。利用企業2,000社以上の実績。ITプロパートナーズ

Midworks 10,000件以上の案件を保有し、週3日〜・フルリモートなど柔軟な働き方に対応。高単価案件が豊富で、報酬保障制度(60%)や保険料負担(50%)など正社員並みの手厚い福利厚生が特徴。通勤交通費(月3万円)、スキルアップ費用(月1万円)の支給に加え、リロクラブ・freeeが無料利用可能。非公開案件80%以上、支払いサイト20日で安心して稼働できます。Midworks