はじめに
Pythonプログラミングでは、インデントがコードの構造を決定するために非常に重要です。インデントが不適切だと、下記のようなエラーが発生してしまいます。
IndentationError: unexpected indent
SyntaxError: unexpected indent
とくに初心者が書いたコードや、別のエディタからコピペしたコードでよく見られるエラーです。本記事では、インデントに関する一般的な問題と、その解決策を詳しく解説します。
インデントって何?
Pythonのインデントは、行頭にスペースやタブを使ってコードを1段下げることを指します。多くの場合、4つのスペースを1インデントとするのが標準的です。たとえば、下記のような関数定義では、本体部分を4つのスペースで下げています。
def example_function():
print("Hello, World!")
このように、インデントの深さでブロック構造を表現しているのがPythonの大きな特徴です。関数定義やfor文、if文などのブロックを作るときに使います。
インデント問題の主な原因と解決方法
1. インデントのルールに従っていない
- 間違った例
def example_function():
print("Hello, World!") # インデントできていない
- 正しい例
def example_function():
print("Hello, World!")
- 解決策
- ブロック構造(
def
,if
,for
など)を開始するたびに、1段深いインデントを使用する。 - 原則としてPythonでは4つのスペースを用いるのがPEP8で推奨されている。
- ブロック構造(
2. タブとスペースが混在している
- 問題点
- 異なるエディタや環境でコピー&ペーストした際に、タブとスペースが混在してインデントがずれてしまう。
- タブ幅が環境によって異なるため、一見整っているように見えてもPythonが認識するインデント量が一致しないことがある。
- 混在した例
for i in range(10):
for j in range(10): # ここはタブ
print(i, j) # ここはスペース (4×2個)
- 解決策
- エディタの設定でタブをスペースに変換するようにする(insertSpacesなどのオプション)。
- Visual Studio Code の例:
// settings.json
{
"editor.insertSpaces": true,
"editor.tabSize": 4
}
- 既存のコードに混在がある場合は、全選択 → インデントを上げる → 下げる、などの操作で統一する。
- 自動フォーマッター(
black
,autopep8
など)を使うのも有効。
3. エンコーディングが異なる
- 問題点
- ファイルの文字コードが原因で、見えない制御文字が含まれる場合がある。
- 特にWindowsで作成したファイルをmacOSやLinuxで編集するときなど、想定外の文字コードが入り込むことがある。
- 解決策
- ファイルを統一して扱う。(例: UTF-8)
- Python でファイルを扱う際に明示的にエンコーディングを指定する:
with open('example.py', 'r', encoding='utf-8') as f:
content = f.read()
- エディタ上でもファイルの保存設定を統一する。(例: UTF-8)
インデント問題の対処法・チェックリスト
以上を踏まえて、インデント問題に対処するチェックリストを以下に示します。一度チェックしてみましょう。
- エディタの設定を見直す
- タブ幅やスペースへの自動変換を有効にする。
- Visual Studio Code, PyCharm, Atom, Sublime Text など、主要エディタはほぼ対応している。
- 自動フォーマットツールの活用
black
やautopep8
を使うと、インデントや余計な空白を整形してくれる。- チーム開発や大規模プロジェクトでは、CIパイプラインに組み込むこともある。
- 見えない文字を可視化する
- 多くのエディタには見えない文字(タブ・スペースなど)を表示する機能がある。
- 簡単な手順:VS Code のコマンドパレットで “Toggle Render Whitespace” を実行すると、タブやスペースが記号として可視化される。
- コード例で差分を確認する
for i in range(10):
for j in range(10): # ここはタブ
print(i, j) # ここはスペース (4×2個)
「自分のエディタだと整って見える」場合でも、Pythonとしては認識が異なることがあるので注意。
まとめ
Pythonでは、インデントがプログラムの構造そのものに影響を与えます。
- 4つのスペースを1インデントとするのが標準
- エディタの設定でタブをスペースに変換する
- 自動フォーマッターや見えない文字の可視化を活用するとトラブルを防げる
いったん対策をしてしまえば、わずらわしいエラーの多くを防げます。ぜひ上記の方法を取り入れてみてください。
さらに学びたい方へ
Udemyのこちらの動画が勉強になります。
(Udemy動画は結構高いものもありますが、セールで80%OFFになったりもするので、セールのタイミングで一気に購入してしまうのがおすすめです)
コメント