不同的缩进在python中没有错误

时间:2013-10-27 06:08:01

标签: python python-2.7

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

虽然我给出了不同的缩进,但代码工作正常,我无法弄明白。

2 个答案:

答案 0 :(得分:7)

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

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

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