들여쓰기 오류: 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 코드를 사용하는 경우 아래의 간단한 단계를 사용하여 모든 혼합 들여쓰기를 공백 또는 탭으로 변환합니다.
Ctrl + Shift + p
「」라고 입력합니다.
indent using spaces
를 누릅니다.
Enter
메모장++를 사용하는 경우 확장 검색 모드로 "바꾸기"를 수행하여 \t를 찾아 4개의 공백으로 바꿉니다.
들여쓰기 문제인 것 같습니다.Python에서는 괄호를 곱슬곱슬하게 맞출 필요는 없지만 들여쓰기 수준과 일치해야 합니다.
공백/탭 문제를 방지하는 가장 좋은 방법은 텍스트 편집기에 보이지 않는 문자를 표시하는 것입니다.이렇게 하면 들여쓰기 관련 오류를 방지하거나 해결할 수 있습니다.
또, 카피 페이스트 된 코드를 삽입하는 것도, 이러한 종류의 문제의 일반적인 원인입니다.
collab을 사용하는 경우 이 명령어를 사용하여 오류를 방지할 수 있습니다.
- < Ctrl + A >
- <탭>
- < Shift - 탭 >
모두 [탭] 들여쓰기를 [스페이스] 들여쓰기로 변환합니다.그럼 OK.
그냥 추가입니다.메모장++의 두 움푹 패인 부분에서도 비슷한 문제가 있었습니다.
- 감지되지 않은 들여쓰기
외부 들여쓰기 수준
----> 검색 탭 ----> 치환 탭 ----> 아래 확장 버튼을 누릅니다.-> \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 code
IDE(또는 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
'source' 카테고리의 다른 글
디폴트로는 index.dload는 로드되지 않음 (0) | 2022.10.02 |
---|---|
MySQL: 인라인 하위 쿼리에서 여러 열 반환 (0) | 2022.10.02 |
이유, 치명적인 오류: 클래스 'PHPUnit_Framework_'Test Case를 찾을 수 없습니다. (0) | 2022.10.02 |
정규화된 UTF-8이란 무엇입니까? (0) | 2022.10.02 |
MySQL에서 하나를 제외한 모든 열을 선택하시겠습니까? (0) | 2022.10.02 |