PythonのTabErrorとIndentationErrorってなに?
初心者がハマりがちなエラーです
Pythonでプログラムを書いているとTabErrorやIndentationErrorというものに遭遇することがあるかと思います。
TabErrorはこんな感じのエラーメッセージが出るはずです。
TabError: inconsistent use of tabs and spaces in indentation
IndentationErrorは2種類あります。
IndentationError: unindent does not match any outer indentation level
IndentationError: unexpected indent
これらのエラーは、インデントにかかわるエラーです。
原因は以下の2パターンが考えられます。
同一ブロック内でタブとスペースが混在している
TabErrorまたはIndentationError(unindent does not...)のエラーが出た場合、ブロック内でタブとスペースのインデントが混在していることが原因です。
同一ブロック内のインデントの数が一致していない
IndentationError(unexpected indent)のエラーが出た場合、ブロック内のインデントの数が一致していないことが原因です。
なぜ初心者はこのエラーにハマるのか
私なりに考えた初心者がハマりがちな理由は以下の通りです。
- インデントを正しく理解していない
- 何も考えずにコードをコピペしている
Pythonのインデントはタブまたはスペースを使用し、同じブロック内のインデントの数は揃える必要があります。
また、同じブロック内でタブとスペースが混在してはいけません。
ネット上で公開されているコードはインデントにスペースを使用しているものもあればタブを使用しているものもあります。
また、スペース4つでインデントしているものもあればスペース3つでインデントしているものもあります。
一般的にインデントの推奨はスペース4つですが、個人の好みで違ったりします。
何も考えずにコピペするとこのエラーにハマることが意外とあります。
このエラーを防ぐには
これらのエラーを防ぐには、インデントについてきちんと理解するということも大事ですがそれだけでは不十分です。
インデントを熟知していても、視覚的にわかるようにしないとタブとスペースの混在は気づきにくいものです。
タブとスペースの混在に気づきやすくするためには、タブやスペースを表示できるエディタを使用すればいいのです。
ここではVS CodeとNotepad++について紹介します。
VS Code
初期状態だとタブとスペースの区別はつきません。
設定を変更するとタブとスペースの違いが分かりやすくなります。
設定方法
[表示] → [空白を描画する]
日本語化していない場合
[View] → [Render Whitespace]
Notepad++
初期状態だとタブとスペースの区別はつきません。
設定を変更するとタブとスペースの違いが分かりやすくなります。
設定方法
[表示] → [制御文字の表示] → [半角スペースとタブを表示]
日本語化していない場合
[View] → [Show Symbol] → [Show White Space and TAB]