2013-10-27 20 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。 –