programing

파이썬에서 "예상치 못한 들여쓰기"를 어떻게 해야 합니까?

powerit 2023. 6. 12. 21:55
반응형

파이썬에서 "예상치 못한 들여쓰기"를 어떻게 해야 합니까?

파이썬에서 "예상치 못한 들여쓰기" 오류를 수정하려면 어떻게 해야 합니까?

Python은 줄의 시작 부분에 공백을 사용하여 코드 블록이 시작되고 끝나는 시기를 결정합니다.발생할 수 있는 오류는 다음과 같습니다.

예기치 않은 들여쓰기입니다.이 코드 줄은 시작 부분에 이전 코드보다 공백이 더 많지만 이전 코드 줄은 하위 블록의 시작 부분이 아닙니다(: if, while 및 for ).블록의 모든 코드 행은 정확히 동일한 공백 문자열로 시작해야 합니다.예를 들어:

>>> def a():
...   print "foo"
...     print "bar"
IndentationError: unexpected indent

이것은 특히 Python을 대화형으로 실행할 때 일반적입니다. 명령 앞에 추가 공간을 두지 마십시오. (예시 코드를 복사하여 붙여넣을 때 매우 성가십니다!)

>>>   print "hello"
IndentationError: unexpected indent

들여쓰기가 외부 들여쓰기 수준과 일치하지 않습니다.이 코드 줄은 이전보다 시작 부분에 공백이 더 적지만 마찬가지로 다른 블록과 일치하지 않습니다.Python은 어디로 갈지 결정할 수 없습니다.예를 들어, 다음에서 최종 인쇄는 if 조항의 일부가 되어야 합니까, 아닌가요?

>>> if user == "Joey":
...     print "Super secret powers enabled!"
...   print "Revealing super secrets"
IndendationError: unindent does not match any outer indentation level

들여쓰기된 블록이 필요합니다.이 코드 줄은 시작 부분의 공백 수가 앞의 것과 동일하지만 마지막 줄은 블록을 시작할 것으로 예상되었습니다(: 문 또는 함수 정의의 경우).

>>> def foo():
... print "Bar"
IndentationError: expected an indented block

아무 일도 하지 않는 기능을 원한다면 "no-op" 명령 패스를 사용합니다.

>>> def foo():
...     pass

(적어도 내 버전의 Python에서는) 탭과 공백을 함께 사용할 수 있지만 Python은 탭의 길이가 8자이며 편집기와 일치하지 않을 수 있다고 가정합니다.탭과 공백을 함께 사용하지 마십시오.대부분의 편집기는 자동으로 다른 편집기로 대체할 수 있습니다.팀에 속해 있거나 오픈 소스 프로젝트에 참여하고 있다면, 그들이 선호하는 것을 확인할 수 있습니다.

이러한 문제를 방지하는 가장 좋은 방법은 하위 블록을 들여놓을 때 항상 일정한 수의 공간을 사용하고 문제를 해결할 수 있는 좋은 IDE를 사용하는 것입니다.이렇게 하면 코드를 더 쉽게 읽을 수 있습니다.

파이썬에서는 띄어쓰기가 매우 중요합니다.코드 블록의 구조를 제공합니다.

이 오류는 다음과 같이 코드 구조를 엉망으로 만들 때 발생합니다.

def test_function():
   if 5 > 3:
   print "hello"

파일에 탭과 공백이 혼합되어 있을 수도 있습니다.

파이스크립터NetBeans와 같은 Python 구문 인식 편집기를 사용하는 것이 좋습니다.

-tt 옵션을 사용하여 코드를 실행하여 탭과 공백을 일관성 없이 사용하는지 확인합니다.

사용 중인 편집기에서 보이는 공백을 켜고 탭을 공백으로 바꿉니다.

Python으로 탭을 사용할 수 있지만 탭과 공간을 혼합하면 일반적으로 오류가 발생합니다.Python 코드를 작성할 때는 탭을 4개의 공백으로 대체하는 것이 좋습니다.

올바른 들여쓰기를 사용합니다.Python은 공백을 인식하므로 블록에 대한 들여쓰기 지침을 따라야 합니다. 그렇지 않으면 들여쓰기 오류가 발생합니다.

다음 명령을 실행하여 문제를 해결합니다.

autopep8 -i <filename>.py

이렇게 하면 코드가 업데이트되고 모든 들여쓰기 오류가 해결됩니다 :)

Sublime Text를 사용하여 Python을 작성하고 있으며 들여쓰기 오류가 발생하고 있다면,

메뉴 보기 → 들여쓰기들여쓰기를 공백으로 변환

제가 설명하는 문제는 Sublime Text 편집기로 인해 발생했습니다.같은 문제가 다른 편집자들에게도 발생할 수 있습니다.본질적으로 이 문제는 Python이 들여쓰기를 공간 측면에서 처리하려는 것과 탭 측면에서 들여쓰기를 코딩하는 다양한 편집기와 관련이 있습니다.

언급되지 않은 한 가지 문제는 들여쓰기와 관련이 없는 코드의 문제로 인해 이 오류가 발생할 수 있다는 것입니다.

예를 들어, 다음 스크립트를 사용합니다.

def add_one(x):
    try:
        return x + 1
add_one(5)

이것은 다음을 반환합니다.IndentationError: unexpected unindent물론 문제가 실종되었을 때.except:진술.

내 요점: 예상치 못한 (비) 들여쓰기가 보고된 위의 코드를 확인하십시오!

편집기에서 " 대신 공백 삽입" 선택사항을 사용해야 합니다.그런 다음 탭 너비를 선택할 수 있습니다(예: 4).메뉴 편집기본 설정 → 편집기에서 이러한 옵션을 찾을 수 있습니다.

결론: 탭이 아닌 공백 사용

이 오류는 Python 인터프리터(터미널/콘솔)에 무언가를 붙여넣을 때도 발생할 수 있습니다.

인터프리터는 빈 행을 표현식의 끝으로 해석하므로 다음과 같은 것을 붙여넣으면

def my_function():
    x = 3

    y = 7

는 통사가빈해것입다니석할 앞에 빈입니다.y = 7 즉 줄 - 표식의끝서으로, 즉당의, 신을기정는, 다줄은음고것는것, 그리의하이다끝능났현▁as▁-줄.y = 7새 식이므로 들여쓰기가 잘못되었습니다.

들여쓰기가 정상인 경우 편집기에 "백서 보기" 옵션이 있는지 확인합니다.이 옵션을 선택하면 공백과 탭이 혼합된 위치를 찾을 수 있습니다.

상황에 따라 다릅니다.아직 다루지 않은 또 다른 시나리오는 다음과 같습니다.특정 메서드가 포함된 클래스가 있는 파일이 하나 있다고 가정합니다.

class Scraper:
    def __init__(self):
        pass

    def scrape_html(self, html: str):
        pass

그리고 파일 하단에는 다음과 같은 것이 있습니다.

if __name__ == "__main__":
    # some
    # commands
    # doing
    # stuff

전체 파일을 이렇게 만듭니다.

class Scraper:
    def __init__(self):
        pass

    def scrape_html(self, html: str):
        pass

if __name__ == "__main__":
    # some
    # commands
    # doing
    # stuff

scrap_html()에서 예를 들어 if/else 문을 엽니다.

class Scraper:
    def __init__(self):
        pass

    def scrape_html(self, html: str):
        if condition:
            pass
        else:

if __name__ == "__main__":
    parser = argparse.ArgumentParser()

추해야합을 추가해야 입니다.pass아니면 당신이 그 진술에 원하는 것이 무엇이든 그렇지 않으면 당신은 얻을 것입니다.

예상 들여쓰기 블록

여기에 이미지 설명 입력

예기치 않은 들여쓰기

여기에 이미지 설명 입력

기대식

여기에 이미지 설명 입력

그리고 첫 번째 줄에.

예기치 않은 들여쓰기

여기에 이미지 설명 입력

하기 »pass이 네 가지 문제를 모두 해결할 수 있습니다.

항상 저에게 효과가 있었던 비결이 있습니다.

예상치 못한 들여쓰기가 발생하여 모든 코드가 완벽하게 들여쓰기되었음을 알게 되면 다른 편집기로 열어보면 들여쓰기되지 않은 코드 줄이 표시됩니다.

제가 빔이나 gedit 또는 편집자들을 그런 식으로 사용했을 때 그런 일이 있었습니다.

코드에 편집기를 하나만 사용합니다.

당신의 스크립트를 복사하고, 그것을 당신의 전체 코드 " " " " ... 아래에 두기만 하면 됩니다.

변수에 이 줄 지정...맘에 들다,

a = """ your Python script """

print a.replace("Here please press the tab button. It will insert some space", " here simply press the space bar four times.")
#
# Here we are replacing tab space by four character
# space as per the PEP 8 style guide...
#
# Now execute this code. In the Sublime Text
# editor use Ctrl + B. Now it will print
# indented code in the console. That's it.

다음 코드의 시작 부분에서 공백이나 탭 공백을 제거하기만 하면 됩니다.

from django.contrib import admin

# Register your models here.
from .models import Myapp
admin.site.register(Myapp)

Notepad++에서 탭 공간을 올바르게 제공했지만 Sublime Text 편집기에서 들여쓰기 문제가 발견되었습니다.

Sublime Text 편집기를 사용하여 한 줄씩 이동합니다.

파이썬의 들여쓰기는 중요하며 다른 많은 프로그래밍 언어와 달리 코드 가독성을 위한 것이 아닙니다.

코드에 연속된 명령 사이에 공백이나 탭이 있으면 Python이 이에 민감하기 때문에 Python은 이 오류를 제공합니다.Python에 코드를 복사하여 붙여넣을 때 이 오류가 발생할 수 있습니다.

메모장++같은 텍스트 편집기를 사용하여 이러한 공백을 식별하고 제거하거나 오류가 발생하는 코드 줄에서 공백을 수동으로 제거하십시오.

# Step 1: Gives an error
L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]
print(L[2: ])

# Step 2: L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]print(L[2: ])

# Step 3: No error after space was removed
L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]
print(L[2: ])
# Output: [[7, 8, 9, 10]]

상황에 따라 다르지만 들여쓰기 오류는 공백 대신 탭을 사용하여 발생하는 경우가 많습니다.

이 문제를 해결하기 위해 수행할 수 있는 몇 가지 단계는 다음과 같습니다.

  1. 오류의 원인이 되는 탭 또는 공백 복사

  2. IDE(일반적으로 +)에서 찾기 및 바꾸기를 수행합니다.

  3. 복사한 탭 또는 공백을 "찾기" 검색 표시줄에 붙여넣은 다음 IDE가 4개의 공백을 "좋은" 들여쓰기로 사용한다고 가정하여 모두 4개의 공백으로 바꿉니다.

외부 소스의 코드를 복사하여 IDE에 붙여넣는 경우에도 이 오류가 자주 발생합니다. 다른 곳의 형식이 "좋은" 들여쓰기로 간주되는 IDE의 정의와 일치하지 않을 수 있기 때문입니다.

언급URL : https://stackoverflow.com/questions/1016814/what-should-i-do-with-unexpected-indent-in-python

반응형