Pythonの学習のために、IDLEシェル(対話モード)elifを入力しようとすると以下のように、インデントしているはずなのに、「SyntaxError: unindent does not match any outer indentation level(インデントの位置が一致していない)」というエラーが表示されてしまうことがあります。

idle indent error

今回は、このエラーをどうすれば回避できるかを説明します。

IDLEシェルではelifとelseは左に詰める

方法はとても簡単です。IDLEの対話モードでは、以下のようにelifを左に詰めてください。elseも同様です。

idle indent

これはIDLEシェル「独自の仕様」です。対話モードのプロンプト>>> は便宜上表示しているだけで、コードとしては考慮しません。つまり、>>> は無いものとしてコードを書くことになります。

そのため、以下のようにブロックの中では、先頭のifと左を揃えます

indent block

ターミナルではパディングしてくれている

一方、コマンドプロンプトターミナルで対話モード(インタラクティブシェル)を利用する場合は、以下のように2行からは、... パディング(詰め物)してくれます。

terminal indent

些細なことでもハマると・・

Pythonの入門書は、IDLEの対話モードから始めるのが定石ですが、なぜか本記事のことを説明している参考書が少ないです。恐らく当たり前のことだから書き忘れているかもしれません。初めて学習する時は、このような些細なことでつまずいしまうものです。参考にしていただけたら嬉しいです。