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


584

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

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


import sys

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

왜?


7
계산에 'n'을 포함 시키려면 아마도 range (1, n + 1)이 더 좋을 것입니다 :-)
Abgan

7
저도 같은 오류를 가지고,하지만 난 방법의 들여 쓰기 우연히 길을 의 하단에이 오류를 준 왼쪽에 약간의 코드에 다음 그 후에 방법. 따라서이 오류는 탭과 공백을 혼합하는 것만이 아니라 발생할 수 있습니다.
Falken 교수 계약

14
Sublime Text 3을 사용하고 있습니다. Django 프로젝트가 있습니다. 다음을 사용하여 오류를 수정했습니다.View > Indentation > Intent Using Spaces
AbhimanyuAryan

pycharm 에서이 문제가 있었지만 구성의 탭 및 간격 조정이 작동하지 않았습니다. 문제는 pycharm 구성을 재정의하는 ~ / .editorconfig 파일이 있다는 것입니다.
Ken Myers

IDLE을 사용하면 들여 쓰기 문제를 훨씬 쉽게 찾을 수 있습니다. 대부분의 편집자가 찾지 못하는 들여 쓰기 오류를 분명히 발견 할 것입니다.
데니스 가타 구

답변:


668

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

이 시도:

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)

2
예, 마지막 두 줄에서 내부 루프 부분 위에 실제로 공간을 두어야했습니다 (SO에만 해당). 확실하지 않은 이유는 ...
cbrulak

3
첫 번째 줄인 "result = 0"(수정으로 1 이상이어야 함)은 간격이
남았지 만

1
예, 까다로울 수 있습니다. 나는 emacs를 사용하여 파이썬을 편집하고 탭을 항상 py 파일의 공백으로 바꾸도록 설정했기 때문에이 문제가 없습니다. 메모장 ++에는 이와 같은 옵션이있을 수 있습니다.
Kevin Tighe

3
atm :) 같은 문제가 발생했습니다. SublimeText는 공백을 점으로 표시하며 매우 유용합니다.
Kris

공백이나 탭으로 들여 쓸 수 있습니다. 당신은 단지 consitent해야합니까? 앞머리
David

265

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

에 대한 Sublime Text사용자 :

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

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


1
당신이 IDE / 텍스트 편집기를 사용 중에 비슷한 옵션 설정 만든다 또한 때마다, 파이썬을 사용하여
activatedgeek

20
또한 ATOM, 패키지> 공백> 공백을 탭으로 변환하면 Python의 구문 오류 두통을 피할 수 있습니다!
loretoparisi

1
공백이 선호되는 방법입니다. PEP008 들여 쓰기탭 또는 공백을 참조하십시오 . . 이런 식으로 숭고하게 설정할 수도 있습니다.
SiHa

13
당신은 공백이 선호되는 방법이라고 말하지만 당신의 대답은 사람들에게 숭고한 탭을 대신 사용하도록 요구합니다! 나는 혼란 스러워요
놓으신

@NunoCalaim 불행히도, 나는 그 질문에 대답 한 후에 일어났습니다. 새 프로젝트를 시작하는 경우 선호하는 공간 기술을 사용하십시오. 그렇기 때문에 새로운 이민자가 면책 조항을 알 수 있도록 굵게 편집했습니다.
activategeek

137

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

python -m tabnanny yourfile.py

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


1
탭 / 공백 들여 쓰기 오류가있는 파일 에서이 작업을 시도했지만 잘못된 탭 파일이있는 출력이 전혀 없습니다. 어떤 생각?
Luchux

1
나는 공백에 문제가 있었고 오류는 191 번째 줄에 있다고 말했지만 tabnanny 덕분에 실제 문제는 그 줄이 아니라 위 줄에 있다는 것을 알았습니다.
richar8086

감사합니다! 좋은 팁입니다. VS 코드에서 flake8로 오류가 식별되었지만 문제가 발생한 위치를 식별 할 수 없었습니다-tabnanny가 마이크로 초 안에 수행했습니다.
Steve

39

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

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


혼란 스러워요. 위의 대답은 공백 대신 탭을 사용하도록 텍스트 편집기 옵션을 전환하는 것입니다.
spurra

3
@BananaCode 탭만 또는 공백 만 사용하는 경우 기술적으로 어떤 것을 선택하든 상관 없습니다. 파이썬의 경우 공백이 선호되지만 내가 참조한 링크를 참조하십시오.
zdan

21

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


13

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

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

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

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

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


9

Vim을 사용하는 경우 escape를 누른 후 다음을 입력하십시오.

gg = G

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


8

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

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


나는 편집을 너무 바꿔서 이상했다. 질문에서 업데이트 된 "편집"메모를 참조하십시오
cbrulak

좋아, 그래서 내 대답의 두 번째 줄이 맞다고 생각합니다-공백과 탭 문자가 혼합되어 있습니다 (각각 ASCII와 32, 8)
Abgan

5

아톰

이동

Packages > Whitespace > Convert Spaces to Tabs

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

python -m tabnanny yourFile.py

또는

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

4

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

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

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


4

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


2

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


2

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

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

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

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


2

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



1

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

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

1

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


1

나는 아무 대답의 특정가 없습니다 실현 때문에 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!")

1

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

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

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


패스 문이 유용 할 수있다 :)
KevinG

1

첫째, 논리 오류가 있음을 상기시키기 위해 결과를 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 문이 끝났다고 알립니다. 파이썬 쉘을 사용한 경험이 있다면 왜 우리가 줄을 써야하는지 이해할 수 있습니다.


1

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

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

IndentationError: unindent does not match any outer indentation level


이것은 나의 문제를 해결했다
bhordupur

0

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

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

#!/usr/bin/python -tt

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



0

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

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

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

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

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


0

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

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

0

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


0

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

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

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

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


0

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

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

이 코드에서 동일한 상황이 발생했습니다. 2 행과 3 행의 이전 들여 쓰기 공간을 삭제 한 다음 탭 또는 공백을 사용하십시오. 둘 다 사용하지 마십시오 . 파이썬으로 코드를 작성하는 동안 들여 쓰기를하십시오. Spyder의 경우 소스> 들여 쓰기 수정으로 이동하십시오. VC 코드와 숭고한 텍스트 또는 다른 편집기에서도 마찬가지입니다. 들여 쓰기를 수정하십시오.


-6

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.