TabError: inconsistent use of tabs and spaces の原因と直し方
同じブロックの中でタブとスペースを混在させたときに出るエラーです。エディタ上では同じ見た目になるため、コードを読むだけでは原因に気づけません。
エラーメッセージの読み方
File "main.py", line 3
main.py- ファイル名
3- 行番号 — Pythonが構文解析を諦めた位置
TabError- エラークラス — 実行前の構文チェックで検出されました
inconsistent use of tabs and spaces in indentation- 内容 — 期待していたもの、または見つけられなかったもの
このエラーが出る典型パターン
パターン1
1 def f(): 2 x = 1 3 print(x) ^
File "main.py", line 3
print(x)
TabError: inconsistent use of tabs and spaces in indentation
同じブロックの中でタブとスペースを混ぜると、Pythonは字下げの深さを一意に決められません。1つのファイルではどちらかに統一します。
直し方: (タブ1) を (スペース4) にします。
広告
広告スロット(未設定)
パターン2
1 x = 5 2 if x > 0: 3 y = 1 4 print(y) ^
File "main.py", line 4
print(y)
TabError: inconsistent use of tabs and spaces in indentation
1行目はスペース、2行目はタブ、というように混ざると発生します。エディタの設定でタブを自動的にスペースへ変換しておくと防げます。
直し方: (タブ1) を (スペース4) にします。
パターン3
1 for i in range(3): 2 j = i 3 print(j) ^
File "main.py", line 3
print(j)
TabError: inconsistent use of tabs and spaces in indentation
見た目では気づきにくいバグの代表です。多くのエディタはタブとスペースを同じ幅で表示するため、目視での発見はほぼ不可能です。
直し方: (タブ1) を (スペース4) にします。
よくある誤解
「タブもスペースも同じ幅に見えるから同じはず」ではありません。Pythonの構文解析はタブとスペースを別の文字として扱うため、見た目が揃っていても内部的には食い違っています。
まとめ
TabError: inconsistent use of tabs and spacesは初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。