Jak naprawić błąd „nieoczekiwane wcięcie” w Pythonie?
python
syntax-error
Wentylator Macintosh
źródło
źródło
Odpowiedzi:
Python używa odstępów na początku wiersza, aby określić, kiedy zaczynają się i kończą bloki kodu. Błędy, które można uzyskać to:
Nieoczekiwane wcięcie. Ten wiersz kodu ma więcej spacji na początku niż poprzedni, ale poprzedni nie jest początkiem podbloku (np. Instrukcja if / while / for). Wszystkie wiersze kodu w bloku muszą zaczynać się dokładnie tym samym ciągiem białych znaków. Na przykład:
Ten jest szczególnie powszechny podczas interaktywnego uruchamiania Pythona: upewnij się, że nie wstawiasz żadnych dodatkowych spacji przed poleceniami. (Bardzo irytujące przy kopiowaniu i wklejaniu przykładowego kodu!)
Niewcięcie nie pasuje do żadnego zewnętrznego poziomu wcięcia. Ten wiersz kodu ma mniej spacji na początku niż poprzedni, ale równie dobrze nie pasuje do żadnego innego bloku, którego mógłby być częścią. Python nie może zdecydować, dokąd zmierza. Na przykład w dalszej części, czy ostateczny wydruk ma być częścią klauzuli if, czy nie?
Oczekiwano bloku z wcięciem. Ta linia kodu ma na początku taką samą liczbę spacji jak poprzednia, ale ostatnia linia miała rozpocząć blok (np. Instrukcja if / while / for, definicja funkcji).
Jeśli chcesz funkcję, która nie robi nic, użyj „no-op” polecenia podanie :
Mieszanie tabulatorów i spacji jest dozwolone (przynajmniej w mojej wersji Pythona), ale Python zakłada, że tabulatory mają długość 8 znaków, co może nie pasować do twojego edytora. Po prostu powiedz „nie” kartom. Większość redaktorów pozwala na automatyczne zastępowanie ich spacjami.
Najlepszym sposobem uniknięcia tych problemów jest zawsze używanie spójnej liczby spacji podczas wcięcia podbloku, a najlepiej użycie dobrego środowiska IDE, które rozwiąże problem za Ciebie. Dzięki temu Twój kod będzie bardziej czytelny.
źródło
except
częścitry
klauzuli. Kod wygląda dobrze (w tym sensie, że wiersz bez wcięcia ma znajdować się pozatry
blokiem), ale Python zgłasza to jako błąd „nieoczekiwanego wcięcia”. Naprawiono to, dodającexcept
, być może używającpass
(tak jak tutaj )W Pythonie odstępy są bardzo ważne, ponieważ zapewniają strukturę bloków kodu. Ten błąd występuje, gdy zepsujesz strukturę kodu, na przykład w ten sposób:
Możesz również mieć w pliku kombinację tabulatorów i spacji.
Sugeruję użycie edytora obsługującego składnię Pythona, takiego jak PyScripter lub Netbeans
źródło
Uruchom swój kod z opcją -tt, aby dowiedzieć się, czy niekonsekwentnie używasz tabulatorów i spacji
źródło
Włącz widoczne spacje w dowolnym używanym edytorze i włącz zastępowanie tabulatorów spacjami.
Chociaż możesz używać tabulatorów z Pythonem, mieszanie tabulatorów i spacji zwykle prowadzi do napotkanego błędu. Zastąpienie tabulatorów 4 spacjami jest zalecanym podejściem do pisania kodu w Pythonie.
źródło
Używając odpowiednich wcięć. Python jest świadomy białych znaków, więc musisz postępować zgodnie z jego wskazówkami dotyczącymi wcięć bloków, w przeciwnym razie otrzymasz błędy wcięć.
źródło
Jeśli piszesz w Pythonie za pomocą Sublime i otrzymujesz błędy wcięć,
zobacz -> wcięcia -> zamień wcięcia na spacje
Problem, który opisuję, jest spowodowany przez edytor tekstu Sublime. Ten sam problem może być spowodowany również przez innych redaktorów. Zasadniczo problem dotyczy tego, że Python chce traktować wcięcia w kategoriach spacji w porównaniu z różnymi edytorami kodującymi wcięcia w kategoriach tabulatorów.
źródło
Upewnij się, że w swoim edytorze używasz opcji „wstaw spacje zamiast tabulatorów”. Następnie możesz wybrać szerokość zakładki, na przykład 4. Możesz znaleźć te opcje w gedit w zakładce edit -> preferences -> editor.
konkluzja: UŻYWAJ SPACJI, a nie zakładek
źródło
Ten błąd może również wystąpić podczas wklejania czegoś do interpretera Pythona (terminal / konsola).
Zauważ, że interpreter interpretuje pusty wiersz jako koniec wyrażenia, więc jeśli wkleisz coś takiego jak
interpreter zinterpretuje pusty wiersz przed
y = 7
jako koniec wyrażenia, tj. że skończyłeś definiować swoją funkcję, a następna linia -y = 7
będzie miała nieprawidłowe wcięcie, ponieważ jest to nowe wyrażenie.źródło
Jedną z kwestii, o której nie wspomniano, jest to, że ten błąd może pojawić się z powodu problemu z kodem, który nie ma nic wspólnego z wcięciami.
Na przykład weźmy następujący skrypt:
Zwraca to,
IndentationError: unexpected unindent
gdy problemem jest oczywiście brakującaexcept:
instrukcja.Moja uwaga: sprawdź powyższy kod, w którym zgłoszono nieoczekiwane (nie) wcięcie!
źródło
Jeśli wcięcie wygląda dobrze, sprawdź, czy Twój edytor ma opcję „Wyświetl odstępy”. Włączenie tego powinno pozwolić na znalezienie miejsc, w których spacje i tabulatory są mieszane.
źródło
Jest sztuczka, która zawsze działała dla mnie:
Jeśli otrzymałeś nieoczekiwane wcięcie i zobaczysz, że cały kod jest idealnie wcięty, spróbuj otworzyć go innym edytorem, a zobaczysz, który wiersz kodu nie jest wcięty.
Zdarzyło mi się to, gdy używałem vim, gedit lub takich edytorów.
Spróbuj użyć tylko jednego edytora dla swojego kodu.
źródło
Po prostu skopiuj skrypt i umieść pod "" "cały kod" "" ...
określ tę linię w zmiennej ... na przykład,
teraz wykonaj ten kod w Sublime Editor używając ctrl + b, teraz wypisze wcięty kod w konsoli. Otóż to
źródło
Wszystko, co musisz zrobić, to usunąć spacje lub spacje z początku poniższych kodów
źródło
Uruchom następujące polecenie, aby rozwiązać problem:
Spowoduje to zaktualizowanie kodu i rozwiązanie wszystkich błędów związanych z wcięciami :)
Mam nadzieję, że to rozwiąże
źródło
Notepad ++ dawał poprawne miejsce tabulacji, ale problem z wcięciami został ostatecznie znaleziony w edytorze tekstu Sublime.
Użyj edytora tekstu Sublime i przejdź linia po linii
źródło
Wcięcie w Pythonie jest ważne i nie służy to po prostu czytelności kodu, w przeciwieństwie do wielu innych języków programowania. Jeśli w kodzie między kolejnymi poleceniami znajduje się biały znak lub tabulator, Python poda ten błąd, ponieważ Python jest na to wrażliwy. Prawdopodobnie wystąpi ten błąd, gdy kopiujemy i wklejamy kod do dowolnego Pythona. Upewnij się, że zidentyfikowałeś i usunąłeś te spacje za pomocą edytora tekstów, takiego jak Notepad ++, lub ręcznie usuń białe znaki z wiersza kodu, w którym pojawia się błąd.
Dzięki!
źródło