2
password = raw_input("Enter password: ")
if password == "1234":
  print "You logged in correctly!"
else:
    print "GTFO"

さまざまなインデントを付けていますが、コードは正常に機能していますが、理解できません。

4

2 に答える 2

7

ステートメントのブロックには少なくとも1つのインデントスペースが必要であるため、IndentationErrorとしてフラグが立てられることはありません

ここであなたifelseは2つの異なるブロックであるため、とにかくインデントされているため、インタープリターはエラーをスローしません

if True:
 print 
elif True:
  print 
elif True:
   print 
elif True:
     print 
else:
         print

これで問題なく動作します

しかし、次のことを試してみると、IndendationError

if True:

    print ""
      print ""  # has different Indentation
    print ""
于 2013-10-27T06:11:02.103 に答える
5

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

于 2013-10-27T06:22:16.477 に答える