들여 쓰기 오류 : 들여 쓰기가 외부 들여 쓰기 레벨과 일치하지 않습니다
아래의 파이썬 코드를 컴파일하면
들여 쓰기 오류 : 들여 쓰기가 외부 들여 쓰기 레벨과 일치하지 않습니다
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
이것은 나를 위해 일했습니다.
단지 추가. 메모장 ++의 들여 쓰기와 비슷한 문제가있었습니다.
- 예외없는 들여 쓰기
외부 들여 쓰기 수준
----> 검색 탭으로 이동 ----> 바꾸기를 탭 하십시오 ----> 라디오 버튼을 누르 십시오. 아래 확장 ---> 이제 \ 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의 구성이었습니다.
Komodo 편집기를 사용하는 경우 유사한 오류 메시지 중 하나에서 제안한대로 수행 할 수 있습니다.
1) 모두 선택 (예 : Ctrl + A)
2) 코드-> Untabify Region으로 이동하십시오.
3) 들여 쓰기가 여전히 올바른지 다시 확인하고 프로그램을 저장하고 다시 실행하십시오.
Python 3.4.2를 사용하고 있습니다.
Python 개발에 Sublime 텍스트를 사용하는 경우 Anaconda 패키지를 사용하여 오류를 피할 수 있습니다 .Anaconda를 설치 한 후,
- 숭고한 파일 열기
- 열린 공간을 마우스 오른쪽 버튼으로 클릭
- 아나콘다를 선택하십시오
- 자동 형식을 클릭하십시오
- 완료 또는 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입니다.
심지어 나도 같은 문제가 발생했다가 나중에 인코딩 문제가 있음을 발견했습니다.
'Programming' 카테고리의 다른 글
인터페이스를 구현하는 모든 유형 얻기 (0) | 2020.02.11 |
---|---|
jQuery를 사용하여 동적 HTML 요소에 이벤트를 어떻게 첨부합니까? (0) | 2020.02.11 |
bash 스크립트에서 숫자를 추가하는 방법 (0) | 2020.02.11 |
테이블 또는 열에 대한 모든 외래 키를 보려면 어떻게합니까? (0) | 2020.02.11 |
명령문의 "INSERT INTO dbo.Blah"부분을 반복하지 않고 여러 행을 삽입하려면 어떻게합니까? (0) | 2020.02.11 |