Code Fix

初級

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パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)