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

尽管我给出了不同的缩进,但代码工作正常,但我无法弄清楚。

4

2 回答 2

7

它不会被标记为 IndentationError,因为任何语句块都必须至少有 1 个缩进空间

这里你的ifandelse是两个不同的块,所以无论如何它都是缩进的,所以解释器不会抛出错误

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 文档解释了缩进。这是一个相关的摘录:

在每个逻辑行的开头,将行的缩进级别与堆栈的顶部进行比较。如果相等,则什么都不会发生。如果较大,则将其压入堆栈,并生成一个 INDENT 令牌。如果它更小,它必须是堆栈上出现的数字之一

在您的代码中,由于缩进级别大于堆栈顶部(即0),因此将其视为单个缩进。该行从堆栈顶部else:弹出,因此解释器不记得您之前的缩进级别. 它只知道它高于.220

当您开始在块中混合缩进时会出现问题:

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 回答