Python で「TabError: inconsistent use of tabs and spaces in indentation」が直らない
同じブロックでタブとスペースが混在するとインデント幅が曖昧になり TabError になる。
インデントをスペース 4 に統一し、エディタでタブをスペースに変換する。
公開:
要約
TabError: inconsistent use of tabs and spaces in indentation は、同じインデントブロックの中でタブとスペースが混ざっていて、Python がインデント幅を一意に決められないときに出る。
Python 3 はタブとスペースの混在を曖昧として拒否する。
見た目では揃っていても文字種が違うと発生するので、インデントをスペースに統一するのが確実。
よくある原因
- ブロック内の混在: 上の行はタブ、下の行はスペース、のように行ごとに文字種が違う。
- エディタ設定: Tab キーがタブ文字を挿入する設定で、スペース基準の既存コードに追記した。
- コピペ由来: 貼り付けた行だけインデント文字が異なる。
解決策
1. 混在を可視化する
cat -A script.py | headタブは ^I、行末は $ で表示されるので、どの行がタブ/スペースかを目視できる。
2. インデントをスペース 4 に統一する
エディタ設定を .editorconfig で固定すると再発しにくい。
[*.py]
indent_style = space
indent_size = 43. 不整合を検出する
python -m tabnanny script.py標準ライブラリの tabnanny が、曖昧なインデントを行番号付きで報告する。
4. まとめて変換する
expand -t 4 script.py > fixed.pyタブを 4 スペースへ展開する。
差分を確認してから元ファイルへ反映する。