password = raw_input("Enter password: ")
if password == "1234":
print "You logged in correctly!"
else:
print "GTFO"
さまざまなインデントを付けていますが、コードは正常に機能していますが、理解できません。
password = raw_input("Enter password: ")
if password == "1234":
print "You logged in correctly!"
else:
print "GTFO"
さまざまなインデントを付けていますが、コードは正常に機能していますが、理解できません。
ステートメントのブロックには少なくとも1つのインデントスペースが必要であるため、IndentationErrorとしてフラグが立てられることはありません
ここであなたif
とelse
は2つの異なるブロックであるため、とにかくインデントされているため、インタープリターはエラーをスローしません
if True:
print
elif True:
print
elif True:
print
elif True:
print
else:
print
これで問題なく動作します
しかし、次のことを試してみると、IndendationError
if True:
print ""
print "" # has different Indentation
print ""
Python のドキュメントでは、インデントについて説明しています。関連する抜粋を次に示します。
各論理行の先頭で、行のインデント レベルがスタックの一番上と比較されます。等しい場合は何も起こりません。それより大きい場合は、スタックにプッシュされ、1 つの INDENT トークンが生成されます。小さい場合は、スタック上で発生する数値の 1 つでなければなりません
あなたのコードでは、インデント レベルがスタックのトップ (つまり0
) よりも大きいため、単一のインデントとして扱われます。else:
行がスタックの一番上から飛び出した2
ため、インタープリターは以前のインデント レベルの記憶を持っていません2
。よりも高いことだけを知ってい0
ます。
ブロック内でインデントを混ぜ始めると、次のような問題が発生します。
def foo():
if True:
return True
return False # Is this part of the if statement or not?
パーサーが に達するreturn False
と、スタックには が含まれます[4, 8]
。次の行には のインデントがありますが6
、これはスタックに含まれていないため、 が生成されますIndentationError
。