「IndentationError: unexpected indent」は、行頭に余分なスペースやタブがあるときに出るPythonのインデント(字下げ)エラーです。原因と直し方を実行しながら確認できます。How to fix IndentationError: unexpected indent in Python — 余分な行頭の空白を削除し、タブをスペース4つに統一すれば解決します。下の診断ツールにコードを貼れば問題行がすぐ分かります。
Pythonコードを貼ると、タブ混在・字下げの飛び・「:」の後に下がっていない行などを行番号つきで検出します。コードはブラウザ内で処理され、送信されません。
x = 10
y = 20
print(x + y)
x = 10
y = 20
print(x + y)
▶ 修正済みコードを実行エディタで開く
Pythonはインデントで処理のまとまりを表します。if・for・defなど「:」の次の行以外は、行頭にスペースを入れてはいけません。ブロック内は半角スペース4つで統一するのが基本です。タブとスペースを混在させないよう、エディタの表示を「スペース」に固定しましょう。
TabError: inconsistent use of tabs and spaces になります。: が無いのに字下げした — ブロックの開始(if・for・def・while・with・class)以外で下げるとエラーです。if の中から抜けたのにインデントを戻していない。IndentationError: expected an indented block は「字下げが足りない」逆のケースです。if や def の次の行が下がっていないと出ます。中身を4スペース下げれば直ります。中身がまだ無いときは pass を置きます。
def greet():
print("hi")
OK
def greet():
print("hi")
見た目は揃っていても、行によってタブと半角スペースが混ざっていると TabError: inconsistent use of tabs and spaces in indentation になります。Pythonはタブを内部的に「幅8」として扱うため、エディタ上で揃って見えても実際の文字は一致しないことがあります。
def calc(x):
if x > 0:
return x * 2
return 0
OK(すべて半角スペース4つに統一)
def calc(x):
if x > 0:
return x * 2
return 0
▶ 修正済みコードを実行エディタで開く
ブロックが二重・三重になると、どこか1行だけ字下げがずれてIndentationErrorになりやすくなります。内側のブロックほど字下げを1段階(4スペース)ずつ増やすのが原則です。
NGfor i in range(3):
if i == 1:
print(i)
OK
for i in range(3):
if i == 1:
print(i)
▶ 修正済みコードを実行エディタで開く
Convert Indentation to Spaces で既存のタブを一括変換。settings.json に "editor.insertSpaces": true, "editor.detectIndentation": false を追加。"editor.renderWhitespace": "boundary"。