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"
尽管我给出了不同的缩进,但代码工作正常,但我无法弄清楚。
它不会被标记为 IndentationError,因为任何语句块都必须至少有 1 个缩进空间
这里你的if
andelse
是两个不同的块,所以无论如何它都是缩进的,所以解释器不会抛出错误
if True:
print
elif True:
print
elif True:
print
elif True:
print
else:
print
这将毫无问题地工作
但是如果我尝试以下我会得到IndendationError
if True:
print ""
print "" # has different Indentation
print ""
Python 文档解释了缩进。这是一个相关的摘录:
在每个逻辑行的开头,将行的缩进级别与堆栈的顶部进行比较。如果相等,则什么都不会发生。如果较大,则将其压入堆栈,并生成一个 INDENT 令牌。如果它更小,它必须是堆栈上出现的数字之一
在您的代码中,由于缩进级别大于堆栈顶部(即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
。