Gdy kompiluję poniższy kod Python, otrzymuję
IndentationError: unindent nie pasuje do żadnego zewnętrznego poziomu wcięcia
import sys
def Factorial(n): # Return factorial
result = 1
for i in range (1,n):
result = result * i
print "factorial is ",result
return result
Dlaczego?
python
indentation
Cbrulak
źródło
źródło
View > Indentation > Intent Using Spaces
Odpowiedzi:
Inne plakaty prawdopodobnie są poprawne ... w twoich kartach mogą być pomieszane spacje. Spróbuj wyszukać i zamień, aby zastąpić wszystkie karty kilkoma spacjami.
Spróbuj tego:
źródło
WAŻNE : spacje są preferowaną metodą - patrz PEP008 Wcięcia oraz tabulatory lub spacje? . (Dzięki za @Siha za to.)
Dla
Sublime Text
użytkowników:Ustaw
Sublime Text
używanie zakładek do wcięcia:View
->Indentation
->Convert Indentation to Tabs
Odznacz
Indent Using Spaces
opcję również w tym samym podmenu powyżej. To natychmiast rozwiąże ten problem.źródło
Aby łatwo sprawdzić problemy z tabulatorami / spacjami, możesz to zrobić:
lub oczywiście możesz poprawnie skonfigurować edytor :-)
źródło
Czy na pewno nie mieszasz tabulatorów i spacji w białym wcięciu? (To spowoduje ten błąd.)
Uwaga: zaleca się, aby nie używać tabulatorów w kodzie Python. Zobacz przewodnik po stylu . Należy skonfigurować Notepad ++, aby wstawiał spacje dla tabulatorów.
źródło
Ilekroć napotkałem ten błąd, dzieje się tak dlatego, że w jakiś sposób pomieszałem tabulatory i spacje w moim edytorze.
źródło
Jeśli korzystasz z edytora IDLE Pythona, możesz zrobić to, co sugeruje jeden z podobnych komunikatów o błędach:
1) wybierz wszystko, np. Ctrl+A
2) Przejdź do Format -> Untabify Region
3) Sprawdź dokładnie, czy wcięcie jest nadal poprawne, zapisz i uruchom ponownie program.
Używam Python 2.5.4
źródło
Jeśli używasz Vima, naciśnij klawisz Escape, a następnie wpisz
gg = G
To auto wcina wszystko i oczyści wszystkie miejsca, w które wrzuciłeś.
źródło
Linia:
result = result * i
powinna być wcięta (jest to korpus pętli for).Lub - masz mieszane znaki spacji i tabulacji
źródło
Na Atom
iść do
Następnie sprawdź ponownie wcięcie pliku:
lub
źródło
Wygląda na problem z wcięciem. Nie trzeba dopasować nawiasów klamrowych w Pythonie, ale nie trzeba dopasować poziom wcięcia.
Najlepszym sposobem zapobiegania problemom ze spacją / tabulatorami jest wyświetlanie niewidocznych znaków w edytorze tekstu. Zapewni to szybki sposób zapobiegania błędom wcięcia i / lub ich rozwiązywania.
Również wstrzykiwanie wklejonego kodu jest częstym źródłem tego typu problemów.
źródło
Jeśli używasz notatnika ++, wykonaj „zamień” w trybie wyszukiwania rozszerzonego, aby znaleźć \ t i zamień na cztery spacje.
źródło
dla użytkowników Atomu
Packages ->whitspace -> remove trailing whitespaces
zadziałało to dla mnieźródło
Tylko dodatek. Miałem podobny problem z dwoma wcięciami w Notepad ++.
Poziom wcięcia zewnętrznego
Idź do ----> zakładka Wyszukaj ----> dotknij zamień ----> kliknij przycisk radiowy Rozszerzony poniżej ---> Teraz zamień \ t czterema spacjami
Idź do ----> zakładka Wyszukaj ----> dotknij zamień ----> kliknij przycisk opcji Rozszerzony poniżej ---> Teraz zamień \ n niczym
źródło
Korzystałem z notesu Jupyter i wypróbowałem prawie wszystkie powyższe rozwiązania (dostosowując się do mojego scenariusza), ale bezskutecznie. Następnie poszedłem linia po linii, usunąłem wszystkie spacje dla każdej linii i zastąpiłem tabulatorem. To rozwiązało problem.
źródło
Dla użytkowników Spyder źródło> Napraw wcięcie, aby natychmiast naprawić problem
źródło
Może być tak, ponieważ powyższa funkcja nie jest wcięta w ten sam sposób. to znaczy
źródło
Wczoraj miałem ten sam problem, był to błąd wcięcia, korzystałem z wysublimowanego edytora tekstu. godzinami próbowałem go naprawić, a na koniec skończyłem kopiowanie kodu do edytora tekstu VI i wszystko działało dobrze. Python ps jest zbyt wrażliwy na białe znaki, pamiętaj, aby nie mieszać spacji i tabulacji.
źródło
Ponieważ zdaję sobie sprawę, że nie ma konkretnej odpowiedzi
spyder
, dodam jedną: Zasadniczo uważnie przyjrzyj się swojemuif
oświadczeniu i upewnij się, że wszystkieif
,elif
ielse
mają takie same odstępy, które są na początku w tej samej linii, tak:źródło
Miałem zdefiniowaną funkcję, ale nie zawierała żadnych treści oprócz komentarzy do funkcji ...
Wrzasnął:
(zwróć uwagę, że linia, na którą
^
wskazuje znak, jest pusta)-
Wiele rozwiązań:
1: Po prostu skomentuj funkcję
2: Dodaj komentarz funkcji
3: Dodaj wiersz, który nic nie robi
W każdym razie upewnij się, że jest oczywiste, dlaczego jest to pusta funkcja - dla ciebie lub dla twoich rówieśników, którzy użyją twojego kodu
źródło
Po pierwsze, aby przypomnieć o logicznym błędzie, lepiej zachować wynik = 1, w przeciwnym razie wynik będzie wynosił 0, nawet po uruchomieniu pętli.
Po drugie, możesz to napisać w ten sposób:
Opuszczenie linii poinformuje powłokę pytona, że instrukcje FOR zostały zakończone. Jeśli masz doświadczenie w używaniu powłoki Pythona, możesz zrozumieć, dlaczego musimy zostawić linię.
źródło
Na ile to jest warte, moje docstring zostało zbyt mocno wcięte, co również powoduje ten sam błąd
IndentationError: unindent does not match any outer indentation level
źródło
Wynika to z pomieszania zarówno tabulatorów, jak i spacji. Możesz usunąć wszystkie spacje i zastąpić je tabulatorami.
Lub spróbuj napisać to:
na początku kodu. Ta linia rozwiązuje wszelkie różnice między tabulatorami i spacjami.
źródło
w moim przypadku problemem była konfiguracja pydev na Eclipse
źródło
Jeśli używasz edytora Komodo, możesz zrobić to, co sugeruje jeden z podobnych komunikatów o błędach:
1) wybierz wszystko, np. Ctrl + A
2) Przejdź do Code -> Untabify Region
3) Sprawdź dokładnie, czy wcięcie jest nadal poprawne, zapisz i uruchom ponownie program.
Używam Python 3.4.2
źródło
Jeśli używasz Sublime text do programowania w języku Python, możesz uniknąć błędu, używając pakietu Anaconda. Po zainstalowaniu Anaconda,
źródło
W programie Intellij z wtyczką python Ctrl + Shift + Alt, aby ponownie sformatować dokument, naprawiono problem wcięcia / tab / spacji
źródło
Dla użytkowników SPYDER : Używam Spyder 3.3.2 z Pythonem 3.7.1 i rozwiązałem ten problem, ustawiając wcięcie w celu użycia kart, wykonując następujące kroki, kliknij:
Następnie resetuję wiersz „niezidentyfikowany” za pomocą klawisza Tab.
Z jakiegoś powodu, bez tego ustawienia czasami dostaję ducha IndentationError.
źródło
Na przykład:
W tym kodzie wystąpiła dla mnie taka sama sytuacja. Po prostu usuń poprzednie wcięcia linii 2 i 3, a następnie użyj tabulacji lub spacji. Nigdy nie używaj obu . Podaj poprawne wcięcie podczas pisania kodu w Pythonie. Dla Spyder goto Źródło> Napraw wcięcie. To samo dotyczy kodu VC i wysublimowanego tekstu lub dowolnego innego edytora. Napraw wcięcie.
źródło
Dzieje się tak głównie z powodu edytora. Spróbuj zmienić tabulatory na spacje (4). Najlepszym przyjaznym dla Pythona IDE lub edytorami są pycharm, wysublimowany, vim dla Linuxa.
nawet ja również napotkałem ten sam problem, później odkryłem, że występuje problem z kodowaniem. Sugeruję, aby zmienić edytor.
źródło