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

다른 들여 쓰기를했지만 코드가 잘 작동하지 않지만 알아낼 수 없습니다.다른 들여 쓰기 파이썬에서 오류 없음

이 IndentationError 같은 것으로 표시되지 않습니다
+0

왜 그렇게 다른 들여 쓰기가 필요하면 오류가 발생합니다! – drj

+0

그는 그가 들여 쓰기의 다른 수준에 있다는 것을 의미한다고 생각합니다. '공간'(길이)과 '탭'의 차이점이 없습니다 –

+0

@drj : 문서를 읽으십시오. http://docs.python.org/3/reference/lexical_analysis.html#indentation – Blender

답변

7

, 문장의 블록을 사인 인이 임대에 ifelse 두 개의 서로 다른 블록은 당신의 여기 들여 쓰기

의 한 공간을 가지고있다, 그래서 인터프리터가 발생합니다 그래서 어쨌든 들여되었다 나는 다음과 같은 시도하는 경우이 문제없이 작동합니다

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은 들여 쓰기를 설명합니다. 관련 발췌 부분은 다음과 같습니다.

각 논리 라인의 시작 부분에서 라인의 들여 쓰기 레벨은 스택의 상단에 비해 입니다. 동일하면 아무 일도 일어나지 않습니다. 이 크면 스택에 푸시되고 하나의 인덱스 토큰은 입니다. 이 작은 경우 들여 쓰기 수준, 그것은 처리 (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 –

관련 문제