password = raw_input("Enter password: ")
if password == "1234":
print "You logged in correctly!"
else:
print "GTFO"
虽然我给出了不同的缩进,但代码工作正常,我无法弄明白。
答案 0 :(得分:7)
它不会被标记为IndentationError,正则任何语句块必须至少有1个缩进空间
这里你的if
和else
是两个不同的块,因此无论如何它都是缩进的,所以解释器不会抛出错误
if True:
print
elif True:
print
elif True:
print
elif True:
print
else:
print
这将毫无问题地工作
但如果我尝试以下操作,我会得到IndendationError
if True:
print ""
print "" # has different Indentation
print ""
答案 1 :(得分:5)
The Python documentation解释缩进。这是一个相关的摘录:
在每条逻辑行的开头,该行的缩进级别为 与堆栈顶部相比。如果它是平等的,没有任何反应。如果 它更大,它被推入堆栈,一个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
。