できない.dev

Python で「TabError: inconsistent use of tabs and spaces in indentation」が直らない

同じブロックでタブとスペースが混在するとインデント幅が曖昧になり TabError になる。
インデントをスペース 4 に統一し、エディタでタブをスペースに変換する。

公開:

要約

TabError: inconsistent use of tabs and spaces in indentation は、同じインデントブロックの中でタブとスペースが混ざっていて、Python がインデント幅を一意に決められないときに出る。

Python 3 はタブとスペースの混在を曖昧として拒否する。
見た目では揃っていても文字種が違うと発生するので、インデントをスペースに統一するのが確実。

よくある原因

  1. ブロック内の混在: 上の行はタブ、下の行はスペース、のように行ごとに文字種が違う。
  2. エディタ設定: Tab キーがタブ文字を挿入する設定で、スペース基準の既存コードに追記した。
  3. コピペ由来: 貼り付けた行だけインデント文字が異なる。

解決策

1. 混在を可視化する

cat -A script.py | head

タブは ^I、行末は $ で表示されるので、どの行がタブ/スペースかを目視できる。

2. インデントをスペース 4 に統一する

エディタ設定を .editorconfig で固定すると再発しにくい。

[*.py]
indent_style = space
indent_size = 4

3. 不整合を検出する

python -m tabnanny script.py

標準ライブラリの tabnanny が、曖昧なインデントを行番号付きで報告する。

4. まとめて変換する

expand -t 4 script.py > fixed.py

タブを 4 スペースへ展開する。
差分を確認してから元ファイルへ反映する。

この記事は役立ちましたか?