2013-10-27 19 views
2
password = raw_input("Enter password: ") 
if password == "1234": 
    print "You logged in correctly!" 
else: 
    print "GTFO" 

虽然我给不同的缩进代码工作正常,我无法弄清楚。不同的缩进python没有错误

+0

为什么如此?如果不同的缩进我们需要得到错误! – drj

+0

我认为他意味着他们处于不同级别的缩进。不像“空间”(&其长度)与“选项卡”不同 –

+0

@drj:阅读文档:http://docs.python.org/3/reference/lexical_analysis.html#indentation – Blender

回答

7

它不会被标记为作为IndentationError,正弦波声明的任何块都必须在租赁的缩进

这里您ifelse是两个不同的区块1层的空间,所以这样的解释抛出它无论如何缩进没有错误

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

这将没有任何问题的工作

但如果我尝试下面我会得到IndendationError

if True: 

    print "" 
     print "" # has different Indentation 
    print "" 
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

+1

+1。 –