TabError: inconsistent use of tabs and spaces in indentation

Python
本ページはプロモーションが含まれています

はじめに

Pythonでソースを書いている時にエラーが。
今回のエラーは場所の特定が困難でした。
ですので覚書としてエラーと対処方法についてのメモです。

エラーメッセージと原因

まず発生したメッセージですが

TabError: inconsistent use of tabs and spaces in indentation

というものでした。
エラーメッセージの意味は

「タブのエラー:タブとスペースのインデントの一貫性がありません」

というものです。
エラーの意味を知ると何が原因かはなんとなく予想がつくかもしれません。

次はエラーが発生するソースコードの例です。

def foo():
    x = 10
    if x > 5:
        print("x is greater than 5") # この行はスペースでインデント
	else:
        print("x is not greater than 5") # この行はタブでインデントなのでエラーが発生

インデントなのでエディタによってはパッと見違いがわからないかもしれません。
コメントで書いてありますが、スペースの場所とタブの場所が混在しています。

Pythonでは、見やすさを意識しているのでインデントは構文の一部となっています。
インデント方法として、通常はスペース4つかタブのいずれか一方を使用します。

全てのインデントがスペースかタブになるようにソースを整形する必要があります。
ちなみにPythonの公式スタイルガイドではスペースを使用が推奨されているみたいですね。

次のソースコードはインデントをスペースに統一したものです。

def foo():
    x = 10
    if x > 5:
        print("x is greater than 5")  # スペースでインデント
    else:
        print("x is not greater than 5")  # スペースでインデントなのでエラーは発生しない

こちらは実行してもエラーが発生しません。

さいごに

ということで今回はpythonのインデント方法によって生じたエラーについてでした。
参考でソースをコピペしたり、別のエディタで書いたものをコピー(一部を置換して貼り付け直す)などするとインデントの形式が混ざってしまうことがあります。

今回僕もエラーが発生した原因が別のエディタで置換をしてそれを貼り付けたからでした。
インデントはぱっと見分かりにくいので、表示がわかりやすい(pythonに対応した)エディタを使うなどするのが良いと思います。

この記事がお役に立ったのなら嬉しいです。
最後までお読みいただきありがとうございます。

タイトルとURLをコピーしました