2012-12-04 2 views
9

편집 겉으로는 정확하고 일관성 들여 쓰기 및 나는이 질문을 완벽하게 명확하게 만들었습니다. 아니요, 실제로, 실제 현실에서, 저는 실제로 실제로 불합리한 의심을 넘어서는 100 % 확신을했습니다.. 빛과 소리가 있고 우리 모두는 에너지와 물질과 상호 작용하는 우리 모두가 공유하는 현실의 특정 부분이 있습니다. 그 현실성에서, 나는 100 % 확신하지 못했다. 나는 반복한다. 그것은 일관성없는 탭과 공백의 경우가 아니다. 솔루션을 찾았는데 일관성이없는 공백이나 탭과 아무런 관련이 없습니다. 이제 자유롭게 투표하십시오.하지만 의견을 통해 왜 개선해야하는지 알 수있게 해주십시오. 고맙습니다.파이썬 : 다운 투표하기 전에, 정말, 실제로</em> 사용에만 4 - 공간 전체의 공백이 있는지 만들었 <em>주의하십시오 : "예기치 않은 들여 쓰기"하지만, 들여 쓰기

원래의 질문 :

내가 파이썬에서 이상한 들여 쓰기 오류를 받고 있어요.

오류 : IndentationError: unexpected indent

for uuid in uuids: 
    sys.stdout.write('Checking \'' + uuid + '\'...') 
    result = qp.get('v2/customer/' + uuid + '/') 
    sys.stdout.write(' exists with status=' + result.status + '.') 

    if result.status != 'S': 
     sys.stdout.write(' Fixing... ') 
     qp.put('v2/customer/' + uuid + '/', { 'status': 'S' }) 
     sys.stdout.write('done.') 

    sys.stdout.write('\n') # <- This is where the error occurs 

사용 공백 만, 아니 탭이 있습니다. 들여 쓰기가 정말 좋아 보인다. 이 온라인에 대해 아무 것도 발견하지 못했습니다. 모든 단일 답변은 탭/공간 불일치를 언급하거나 들여 쓰기 자체에 문제가있는 것을 발견하지만이 경우 문제가 무엇인지 알 수 없습니다.

Vim을 편집자로 사용하고 있습니다.

미리 감사드립니다.

+0

공백과 탭이 섞여 있는지 확인하십시오 .... – avasal

+0

설명에서 말했듯이 이미 확인했습니다. 이것은 탭/공간 불일치가 아닙니다. 해당 부분을 강조하기 위해 질문이 업데이트되었습니다. – Teekin

+0

일반적으로 서식 지정에 관한 것입니다. 실제로 탭과 공백을 혼합하지 않았습니까? 다시 쓰고이 코드를 다른 곳으로 복사 한 다음 오류가 있는지 확인하십시오. – nathan

답변

8

UPDATE는

나는 결국 발견했다. 문제는 Django 쉘에 입력을 파이핑했기 때문에 발생했습니다. "./manage.py shell < some_file.py"의 효과가 있었지만 환경의 특성을 기억하지 못했습니다. 오늘 나는 사용자 정의 장고 명령 ([appname]/management/commands/some_command.py)을 만들고 ./manage.py some_command을 실행 하겠지만이 문제가 발생한 당시에는 그 옵션을 알지 못했습니다.

텍스트를 파이핑 할 때 OS 쉘 (예 : Django 또는 Python이 아닌 Bash)이 공백과 탭을 해석하는 것과 관련이 있다고 가정합니다. 오류의보고 된 위치가 여전히 이상하다고 생각합니다.

다음은 내 원래 응답 인 좌절입니다.

원래 응답/솔루션

음, 확실히 실망했다. 하지만 그 대답은 바보 같았습니다.

우리 모두가 알다시피, 파이썬에서 문장 사이에 빈 줄을 사용하는 것은 완벽합니다.예를 들어,이 괜찮을해야합니다 제외

if True: 
    something = 'whatever' 

    #the line above here does NOT contain spaces, it's just a newline 
    another_thing = something 

을, 그것이 밝혀 때로는 파이썬은 그냥에도 불구하고 중, 중요하다고 판단한다.

물론 질문을 할 때, 나는 문제의 라인 위에 빈 라인을 꺼내기 위해 이미 여러 번 시도했지만, 중요하지 않아도 들여 쓰기를 시도했다. 어느 쪽도 효과가 없었다.

그러나 문제는 실제로 sys.stdout.write(' exists with status=' + result.status + '.') 아래 줄에서 시작됩니다. 이것이 바로 두 번째 빈 줄의 문제를 유발합니다. 파이썬은 차례대로 아래 아래에 불만을 제기합니다. 개발자에게 올바른 줄을 알려주는 것이 분명하기 때문입니다. 너무 간단합니다.

for uuid in uuids: 
    sys.stdout.write('Checking \'' + uuid + '\'...') 
    result = qp.get('v2/customer/' + uuid + '/') 
    sys.stdout.write(' exists with status=' + result.status + '.') 

    # The line above this comment must have " " 
    if result.status != 'S': 
     sys.stdout.write(' Fixing... ') 
     qp.put('v2/customer/' + uuid + '/', { 'status': 'S' }) 
     sys.stdout.write('done.') 

    # The line above this comment must also have " " 
    sys.stdout.write('\n') # <- This is where Python, idiotically enough, complains. 

이것은 분명히 때로는 발생합니다. 필자는 이전에 이런 일을 할 필요가 없었습니다. 파이썬이 왜 이런 식으로 이것을 원하는지 모르겠습니다.

분명히이 모든 것은 분명히 불합리하지만 거기에 가야합니다. 그것이 해결책입니다. 이런 일이 발생하면 모든 빈 줄을 들여 쓰기하십시오.

+0

파이썬의 모든 버전에서 줄이 띄워 져서 재현 할 필요가 없습니다. 이것은 매우 모호한 버그이거나 문제를 잘못 진단 한 것입니다. 'python -tt yourfilename.py'는 작동하지 않는 원래의 코드로 돌아갑니다. – DSM

+0

그래, 나는 파이썬 문제에 관해서 내가 말한 단어를 믿는 사람은 아무도 없다.하지만 나는 하나님 께 맹세한다. 문제의 설명은 정확하다. 나는 공백에 대해 확신한다. 그리고 나는 확신한다. 이것이 바로 그것을 고쳤다는 것입니다. 나를 믿지 않는 사람들은 나를 믿지 않아야하며, 나는 더 이상 상관하지 않습니다. 나에게는 분명히 모호한 버그입니다. – Teekin

+4

당신이 100 % 맞을 수 있고 (1) 수백만 번 모두 보인 실수와 유사한 증상이있는 버그를 가지고 있고 (2) 필요한 정보를 제공하지 않으려는 불행한 위치에있는 것이 분명합니다. 사람들이 당신이 실제로 옳은지 아닌지를 판단하게합니다. 한 번 전에 저에게 일어난 일입니다. 나는 사람들에게 그들이 내가 옳았다는 것을 알 필요가있는 정보를 줄 시간이 없었을뿐입니다. (그리고 파이썬 코어에서 패치를 얻었으므로 파이썬 버그를 믿을 수는 있습니다.) 그러나 사람들이 가장 간단한 결론을 내리는 경우 놀라지 않을 수 있습니다. – DSM

0

텍스트 편집기 소프트웨어에 이상한 문제 일 수 있습니다.

나는이 경험을 과거에 들었으며 모든 들여 쓰기를 삭제하고 에 공백을 넣고을 다시 열어 탭을 삭제합니다. 그것을 전달하는 방법을 내가 발견 한 후 문제가 긴 발생한 이유

+0

이미했습니다. 그것이 공간 인 이유입니다. :) – Teekin

+0

당신은 어떤 편집기를 사용하고 있습니까? – rikAtee

+0

빔. 나는 또한 Sublime Text 2 (Mac OS)로 다양한 것을 시도했다. – Teekin

2

빈 줄에 공백을 추가해야하는 것 같습니다.

가 작동하지 않습니다 :

for uuid in uuids: 
    sys.stdout.write('Checking \'' + uuid + '\'...') 
    result = qp.get('v2/customer/' + uuid + '/') 
    sys.stdout.write(' exists with status=' + result.status + '.') 
# 
    if (result.status != 'S'): 
     sys.stdout.write(' Fixing... ') 
     qp.put('v2/customer/' + uuid + '/', { 'status': 'S' }) 
     sys.stdout.write('done.') 
# 
    sys.stdout.write('\n') # <- This is where the error occurs 

작품 다음과 같은 코드를 시도하여이 문제를 관찰 할 수

for uuid in uuids: 
    sys.stdout.write('Checking \'' + uuid + '\'...') 
    result = qp.get('v2/customer/' + uuid + '/') 
    sys.stdout.write(' exists with status=' + result.status + '.') 
    # 
    if (result.status != 'S'): 
     sys.stdout.write(' Fixing... ') 
     qp.put('v2/customer/' + uuid + '/', { 'status': 'S' }) 
     sys.stdout.write('done.') 
    # 
    sys.stdout.write('\n') # <- This is where the error occurs 

가능한 explaination : 위의 들여 쓰기의 차이를 관찰 주석 기호 (#)를 추가 한 두 개의 빈 줄에 코드가 있습니다. 공백 만 포함 된 줄은이 웹 사이트의 편집자가 제대로 처리하지 못하는 것 같습니다. 사실, 위의 코드 (작동하는 코드)를 다시 복사하면 공백만을 포함하는 두 줄의 들여 쓰기 (일단 내 대답이 게시되거나 편집기의 미리보기 창에 표시됨)가 느슨합니다.

는이 작업을 기대 (하지만 그렇지 않은) : 자신을 위해 그것을 시도

for uuid in uuids: 
    sys.stdout.write('Checking \'' + uuid + '\'...') 
    result = qp.get('v2/customer/' + uuid + '/') 
    sys.stdout.write(' exists with status=' + result.status + '.') 

    if (result.status != 'S'): 
     sys.stdout.write(' Fixing... ') 
     qp.put('v2/customer/' + uuid + '/', { 'status': 'S' }) 
     sys.stdout.write('done.') 

    sys.stdout.write('\n') # <- This is where the error occurs 

이 아마 공백 만 포함하는 코드 라인을 피함으로써 해결 될 수있을 때 복사/질문을 게시/이 웹 사이트에서 답을 구하십시오. 예 :

나는 단지 내가 말하고 무엇 가정, 나는 내가 잘못 될 수도 알고 다시

for uuid in uuids: 
    sys.stdout.write('Checking \'' + uuid + '\'...') 
    result = qp.get('v2/customer/' + uuid + '/') 
    sys.stdout.write(' exists with status=' + result.status + '.') 
    if (result.status != 'S'): 
     sys.stdout.write(' Fixing... ') 
     qp.put('v2/customer/' + uuid + '/', { 'status': 'S' }) 
     sys.stdout.write('done.') 
    sys.stdout.write('\n') # <- This is where the error occurs 

을 작동합니다. 그럼에도 불구하고, 나는 이것이 도움이되기를 바랍니다.

+0

그래, 그것이 끝내게되는 I 'm, 내가 그것을 이해 했더라면 나는 내가 나 자신으로 답장하는 것에 따라 있었다. 이상한 일은 이전에는 파이썬에서이 기능이 필요하다는 것을 본 적이 없다는 것입니다. 바라건대 언젠가 나는 왜 그것이 정확하게 이번에는 그것을 원하게되는지 알아낼 것입니다. – Teekin