Programming

들여 쓰기 오류 : 들여 쓰기가 외부 들여 쓰기 레벨과 일치하지 않습니다

procodes 2020. 2. 11. 22:43
반응형

들여 쓰기 오류 : 들여 쓰기가 외부 들여 쓰기 레벨과 일치하지 않습니다


아래의 파이썬 코드를 컴파일하면

들여 쓰기 오류 : 들여 쓰기가 외부 들여 쓰기 레벨과 일치하지 않습니다


import sys

def Factorial(n): # Return factorial
    result = 1
    for i in range (1,n):
        result = result * i
    print "factorial is ",result
    return result

왜?


다른 포스터는 아마도 정확할 것입니다 ... 탭과 공백이 섞여있을 수 있습니다. 검색 및 바꾸기를 시도하여 모든 탭을 공백으로 바꿉니다.

이 시도:

import sys

def Factorial(n): # return factorial
    result = 1
    for i in range (1,n):
        result = result * i
    print "factorial is ",result
    return result

print Factorial(10)

중요 : 공백이 선호되는 방법입니다. PEP008 들여 쓰기탭 또는 공백을 참조하십시오 . . (@Siha에게 감사드립니다.)

에 대한 Sublime Text사용자 :

Sublime Text들여 쓰기에 탭을 사용하도록 설정하십시오 View.-> Indentation->Convert Indentation to Tabs

Indent Using Spaces위의 동일한 하위 메뉴에서 옵션을 선택 취소하십시오 . 이 문제가 즉시 해결됩니다.


탭 / 공백 관련 문제를 쉽게 확인하려면 실제로 다음을 수행하십시오.

python -m tabnanny yourfile.py

또는 물론 편집기를 올바르게 설정할 수 있습니다 :-)


들여 쓰기 공백에서 탭과 공백을 혼합하지 않습니까? (그러면 오류가 발생합니다.)

파이썬 코드에서는 탭을 사용하지 않는 것이 좋습니다. 스타일 가이드를 참조하십시오 . 탭 공백을 삽입하도록 메모장 ++을 구성해야합니다.


이 오류가 발생할 때마다 편집기에서 탭과 공백이 혼합되어 있기 때문입니다.


파이썬의 IDLE 편집기를 사용하면 비슷한 오류 메시지 중 하나에서 제안하는 것처럼 할 수 있습니다.

1) 모두 선택, 예를 들어 Ctrl+A

2) 형식-> 지역 탭 해제로 이동하십시오.

3) 들여 쓰기가 여전히 올바른지 다시 확인하고 프로그램을 저장하고 다시 실행하십시오.

파이썬 2.5.4를 사용하고 있습니다


줄 : result = result * i들여 쓰기해야합니다 (for-loop의 본문입니다).

또는-공백과 탭 문자가 혼합되어 있습니다.


Vim을 사용하는 경우 escape를 누른 다음

gg = G

이 자동은 모든 것을 들여 쓰기하고 던진 공간을 정리합니다.


들여 쓰기 문제인 것 같습니다. 파이썬에서는 중괄호와 일치 하지 않아도 되지만 들여 쓰기 수준과 일치 해야 합니다.

공백 / 탭 문제를 방지하는 가장 좋은 방법은 텍스트 편집기에 보이지 않는 문자를 표시하는 것입니다. 이는 들여 쓰기 관련 오류를 예방 및 / 또는 해결하는 빠른 방법을 제공합니다.

또한 복사하여 붙여 넣은 코드를 삽입하는 것이 이러한 유형의 문제의 일반적인 원인입니다.


notepad ++를 사용하는 경우 확장 검색 모드로 "바꾸기"를 수행하여 \ t를 찾고 4 개의 공백으로 바꾸십시오.


아톰

이동

Packages > Whitespace > Convert Spaces to Tabs

그런 다음 파일 들여 쓰기를 다시 확인하십시오.

python -m tabnanny yourFile.py

또는

>python
>>> help("yourFile.py")

Atom 사용자의 경우 Packages ->whitspace -> remove trailing whitespaces이것은 나를 위해 일했습니다.


단지 추가. 메모장 ++의 들여 쓰기와 비슷한 문제가있었습니다.

  1. 예외없는 들여 쓰기
  2. 외부 들여 쓰기 수준

    ----> 검색 탭으로 이동 ----> 바꾸기를하십시오 ----> 라디오 버튼을 누르 십시오. 아래 확장 ---> 이제 \ t를 네 개의 공백으로 바꾸십시오.

    ----> 검색 탭으로 이동 ----> 바꾸기를 누르십시오 ----> 라디오 버튼을 누르 십시오. 아래 확장 ---> 이제 \ n을 아무것도 아닌 것으로 바꾸십시오.


어제 똑같은 문제가 있었는데 들여 쓰기 오류가 있었고 숭고한 텍스트 편집기를 사용하고있었습니다. 그것을 고치려고 노력하는 데 시간이 걸렸고 결국에는 코드를 VI 텍스트 편집기에 복사하고 정상적으로 작동했습니다. ps python은 공백에 너무 민감하므로 공백과 탭을 혼합하지 마십시오.


나는 아무 대답의 특정가 없습니다 실현 때문에 spyder기본적으로주의 깊게 살펴 : 나는 하나 추가 할 것입니다 if문 있는지 모두 확인 if, elif그리고 else그들이 그렇게 같은 시작에서 같은 줄에있을 것입니다 동일한 간격을 가지고 :

def your_choice(answer):
    if answer>5:
        print("You're overaged")
    elif answer<=5 and answer>1: 
            print("Welcome to the toddler's club!")
    else:
            print("No worries mate!")

함수가 정의되었지만 함수 주석과 는 다른 내용이 없었습니다 ...

def foo(bar):
    # Some awesome temporary comment.
    # But there is actually nothing in the function!
    # D'Oh!

소리 쳤다 :

  File "foobar.py", line 69

                                ^
IndentationError: expected an indented block

( ^표시가 가리키는 은 비어 있음)

-

여러 솔루션 :

1 : 기능을 주석 처리하십시오.

2 : 기능 설명 추가

def foo(bar):
    '' Some awesome comment. This comment could be just one space.''

3 : 아무것도하지 않는 줄 추가

def foo(bar):
    0

어쨌든 자신이나 코드를 사용할 동료들에게 빈 함수 인지 분명히 밝히 십시오.


Jupyter 노트북을 사용하고 거의 모든 위의 솔루션 (내 시나리오에 적응)을 사용하지 않았습니다. 그런 다음 한 줄씩 이동하여 각 줄의 모든 공백을 삭제하고 탭으로 바꿨습니다. 문제가 해결되었습니다.


첫째, 논리적 오류가 있음을 상기시키기 위해 결과를 1로 유지하는 것이 좋습니다. 그렇지 않으면 루프가 실행 된 후에도 결과가 결과 = 0이됩니다.

두 번째로 다음과 같이 작성할 수 있습니다.

import sys

def Factorial(n): # Return factorial
  result = 0
  for i in range (1,n):
     result = result * i

  print "factorial is ",result
  return result

줄을 남기면 파이썬 쉘에 FOR 문이 끝났다고 알립니다. 파이썬 쉘을 사용한 경험이 있다면 왜 우리가 줄을 써야하는지 이해할 수 있습니다.


위 함수가 같은 방식으로 들여 쓰기되지 않았기 때문일 수 있습니다.

class a:
    def blah:
      print("Hello world")
    def blah1:
      print("Hello world")

탭과 공백이 혼합되어 있기 때문입니다. 모든 공백을 제거하고 탭으로 바꿀 수 있습니다.

또는 다음과 같이 작성하십시오.

#!/usr/bin/python -tt

코드의 시작 부분에. 이 줄은 탭과 공백의 차이점을 해결합니다.


내 경우에는 문제는 Eclipse에서 pydev의 구성이었습니다.

pydev @ 이클립스


Komodo 편집기를 사용하는 경우 유사한 오류 메시지 중 하나에서 제안한대로 수행 할 수 있습니다.

1) 모두 선택 (예 : Ctrl + A)

2) 코드-> Untabify Region으로 이동하십시오.

3) 들여 쓰기가 여전히 올바른지 다시 확인하고 프로그램을 저장하고 다시 실행하십시오.

Python 3.4.2를 사용하고 있습니다.


Python 개발에 Sublime 텍스트를 사용하는 경우 Anaconda 패키지를 사용하여 오류를 피할 수 있습니다 .Anaconda를 설치 한 후,

  1. 숭고한 파일 열기
  2. 열린 공간을 마우스 오른쪽 버튼으로 클릭
  3. 아나콘다를 선택하십시오
  4. 자동 형식을 클릭하십시오
  5. 완료 또는 Ctrl + Alt + R을 누릅니다.

그 가치에 대해 내 docstring은 너무 많이 들여 쓰기되었으며 동일한 오류가 발생합니다.

class junk: 
     """docstring is indented too much""" 
    def fun(): return   

IndentationError: unindent does not match any outer indentation level


파이썬 플러그인을 사용하는 intellij에서 Ctrl + Shift + Alt를 사용하여 문서를 다시 포맷하면 들여 쓰기 / 탭 / 공백 문제가 해결되었습니다.


들어 스파이더 사용자 : 내가 파이썬 3.7.1와 스파이더 3.3.2을 사용하고 있는데 나는 다음 단계를 사용 탭으로 들여 쓰기를 설정,이 문제를 해결, 클릭 :

  • 도구.
  • 환경 설정.
  • 편집자.
  • 고급 설정.
  • 들여 쓰기 문자-> 탭.

그런 다음 탭 키를 사용하여 "식별되지 않은"행을 재설정합니다.

어떤 이유로이 설정이 없으면 고스트 IndentationError가 발생합니다.


이것은 주로 편집기 때문에 발생합니다. 탭을 공백으로 변경하십시오 (4). 최고의 파이썬 친화적 인 IDE 또는 편집기는 Linux 용 pycharm, sublime, vim입니다.
심지어 나도 같은 문제가 발생했다가 나중에 인코딩 문제가 있음을 발견했습니다.

참고 URL : https://stackoverflow.com/questions/492387/indentationerror-unindent-does-not-match-any-outer-indentation-level



반응형