source

들여쓰기 오류: unindentent가 외부 들여쓰기 수준과 일치하지 않습니다.

gigabyte 2022. 10. 2. 22:06
반응형

들여쓰기 오류: unindentent가 외부 들여쓰기 수준과 일치하지 않습니다.

아래 Python 코드를 컴파일하면

들여쓰기 오류: unindentent가 외부 들여쓰기 수준과 일치하지 않습니다.


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)

중요: 스페이스를 사용하는 것이 좋습니다.PEP 8 들여쓰기 및 탭 또는 공백 참조.(이것에 대해 @Siha에게 감사한다.)

Sublime Text 사용자의 경우:

들여쓰기에 탭을 사용하도록 Sublime Text 설정:표시 --> 들여쓰기 --> 들여쓰기를 탭으로 변환

의 같은 서브메뉴에서 스페이스로 들여쓰기 옵션도 꺼줍니다.그러면 이 문제가 즉시 해결됩니다.

탭/스페이스에 문제가 없는지 쉽게 확인하려면 실제로 다음과 같이 하십시오.

python -m tabnanny yourfile.py

또는 에디터를 올바르게 셋업 할 수도 있습니다.물론 :-)

들여쓰기 공백에 탭과 공백을 섞지 않으시겠습니까?(그 때문에 에러가 발생합니다).

참고로 Python 코드에는 탭을 사용하지 않는 것이 좋습니다.스타일 가이드를 참조하십시오.탭 공간을 삽입하도록 Notepad++를 구성해야 합니다.

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

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

gg=G

이 자동 입력 기능은 모든 것을 입력하며 사용자가 사용한 모든 공간을 정리합니다.

Python의 IDLE 에디터를 사용하는 경우 유사한 오류 메시지 중 하나에 제시된 대로 수행할 수 있습니다.

1) 모두 선택(예: +)

2) [Format] -> [ Untabify Region ]으로 이동합니다.

3) 들여쓰기가 아직 올바른지 다시 한 번 확인하고 프로그램을 저장한 후 다시 실행합니다.

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

::result = result * i(for-loop 본체)를 삽입해야 합니다.

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

Spyder 사용자의 경우 [Source]> [ Fix Inditation ]를 클릭하여 문제를 즉시 해결합니다.

아톰

에 가다

Packages > Whitespace > Convert Spaces to Tabs

그런 다음 파일 들여쓰기를 다시 확인합니다.

python -m tabnanny yourFile.py

또는

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

Visual 스튜디오 코드 사용

vs 코드를 사용하는 경우 아래의 간단한 단계를 사용하여 모든 혼합 들여쓰기를 공백 또는 탭으로 변환합니다.

  1. Ctrl + Shift + p

  2. 「」라고 입력합니다.indent using spaces

  3. 를 누릅니다.Enter

메모장++를 사용하는 경우 확장 검색 모드로 "바꾸기"를 수행하여 \t를 찾아 4개의 공백으로 바꿉니다.

들여쓰기 문제인 것 같습니다.Python에서는 괄호를 곱슬곱슬하게 맞출 필요는 없지만 들여쓰기 수준과 일치해야 합니다.

공백/탭 문제를 방지하는 가장 좋은 방법은 텍스트 편집기에 보이지 않는 문자를 표시하는 것입니다.이렇게 하면 들여쓰기 관련 오류를 방지하거나 해결할 수 있습니다.

또, 카피 페이스트 된 코드를 삽입하는 것도, 이러한 종류의 문제의 일반적인 원인입니다.

collab을 사용하는 경우 이 명령어를 사용하여 오류를 방지할 수 있습니다.

  1. < Ctrl + A >
  2. <탭>
  3. < Shift - 탭 >

모두 [탭] 들여쓰기를 [스페이스] 들여쓰기로 변환합니다.그럼 OK.

그냥 추가입니다.메모장++의 두 움푹 패인 부분에서도 비슷한 문제가 있었습니다.

  1. 감지되지 않은 들여쓰기
  2. 외부 들여쓰기 수준

    ----> 검색 탭 ----> 치환 탭 ----> 아래 확장 버튼을 누릅니다.-> \t 를 공백 4 개로 바꿉니다.

    ----> 검색 탭 ----> 치환 ----> 아래 확장 버튼을 누릅니다.-> \n 를 아무것도 입력하지 않습니다.

저는 Jupyter 노트북을 사용하고 있었는데, 위의 거의 모든 솔루션(시나리오에 적용)을 시도해 봤지만 소용이 없었습니다.그런 다음 한 줄씩 이동하여 각 줄의 모든 공백을 삭제하고 탭으로 대체했습니다.그것으로 문제가 해결되었다.

내 docstring이 너무 많이 들어가 있어서 같은 오류가 발생합니다.

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

IndentationError: unindent does not match any outer indentation level

Ubuntu OS에서 Sublime 텍스트를 사용하고 있습니다.이 문제를 해결하려면 다음 페이지로 이동하십시오.

뷰 -> 들여쓰기 -> 들여쓰기를 탭으로 변환

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

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

구체적인 답은 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!")

플라스크 프로젝트에서 Sublime Text 3을 사용하고 있습니다.[View] > [ Inditation ]> [ Tab Width : 4 ]를 사용하여 스페이스로 들여쓰기 후 오류를 수정했습니다.

탭과 공백이 혼재되어 있기 때문입니다.모든 공백을 제거하고 탭으로 대체할 수 있습니다.

또는 다음과 같이 써 보십시오.

#!/usr/bin/python -tt

코드 선두에 표시됩니다.이 행은 탭과 공간 간의 차이를 해결합니다.

어제도 똑같은 문제가 있었는데 들여쓰기 오류였어요. 숭고한 텍스트 에디터를 사용하는 거였어요.수정하는 데 몇 시간이 걸렸고 결국 코드를 VI 텍스트 에디터에 복사했습니다.ps python은 공백에 민감하기 때문에 공백과 탭을 혼재시키지 마십시오.

Atom 사용자의 경우,Packages ->whitspace -> remove trailing whitespaces이것은 나에게 효과가 있었다.

함수가 정의되어 있었지만, 그 함수의 코멘트 이외의 내용은 없었습니다.

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

어떤 경우든 사용자 자신 또는 코드를 사용하는 동료에게 빈 함수인 이유를 명확히 해 주십시오.

첫째, 논리적 오류가 있음을 알리기 위해 result=1을 유지하십시오. 그렇지 않으면 루프가 실행된 후에도 출력이 result=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 문이 종료되었음을 알립니다.python 쉘을 사용해 본 경험이 있다면 왜 줄을 남겨야 하는지 이해할 수 있습니다.

예를 들어 다음과 같습니다.

1. def convert_distance(miles):
2.   km = miles * 1.6
3.   return km

이 코드에서는, 같은 상황이 나에게 일어났다.2행과 3행의 이전 들여쓰기 공간을 삭제한 다음 탭 또는 공백을 사용하십시오.쓰지 마세요.python으로 코드를 작성할 때 들여쓰기를 올바르게 합니다.[ Spyder goto Source ]> [ Fix Inditation 。VC 코드, 서브슬라이밍 텍스트 또는 기타 에디터도 마찬가지입니다.움푹 들어간 곳을 고치다.

코드에 탭이 없는데도 이 오류가 발생했는데, 그 이유는 코드에 불필요한 닫힘 괄호가 있었기 때문입니다.좀 더 일찍 알아냈어야 했어 왜냐면 등호 전후의 공간이 엉망이었거든달려가도 뭔가 이상하면Reformat codeIDE(또는 autopep8을 수동으로 실행)에서 괄호가 모두 일치하는지 확인합니다.첫 번째 등호 전후의 이상한 공간부터 순서대로 시작합니다.

또 다른 이유로 같은 오류가 발생했는데, 탭 대 스페이스가 문제가 아니었습니다.나는 첫 번째를 가졌다.if보다 약간 더 움푹 패인else:훨씬 더 아래쪽에.한두 칸 정도라면 긴 코드 블록 후에 감독할 수 있습니다.docstring도 마찬가지입니다.

"""comment comment 
comment
"""

또, 같은 페이지의 다른 을 참조해 주세요.

몇 줄이면 재현 가능:

if a==1:
    print('test')
 else:
    print('test2')

던지기:

  File "<ipython-input-127-52bbac35ad7d>", line 3
    else:
         ^
IndentationError: unindent does not match any outer indentation level

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

반응형