Próbuję utworzyć aplikację w języku Python 3.2 i cały czas używam tabulatorów do wcięcia, ale nawet edytor zmienia niektóre z nich na spacje, a następnie, gdy próbuję uruchomić, drukuje „niespójne użycie tabulatorów i spacji z wcięciem” program.
Jak mogę zmienić spacje na tabulatory? Doprowadza mnie to do szału. (Jestem początkującym w programowaniu). Byłbym szczęśliwy, gdybym mógł uzyskać ogólne wskazówki na temat mojego kodu, jeśli popełniłem wiele błędów, chętnie to usłyszę.
import random
attraktioner = ["frittfall","bergodalbana","spökhuset"]
class Nojesfalt:
def __init__(self, attraktion):
self.val = attraktion
self.langd = 0
self.alder = 0
#längdgräns för fritt fall
def langdgrans(self):
print("")
self.langd = int(input("Hur lång är du i cm? "))
if self.langd < 140:
print("tyvärr, du är för kort, prova något annat")
return 0
elif self.langd >= 140:
print("håll dig hatten, nu åker vi!")
print(" ")
return 1
#åldersgräns för spökhuset
def aldersgrans(self):
print("")
self.alder = int(input("Hur gammal är du? "))
if self.alder < 10:
print("tyvärr, du är för ung, prova något annat")
return 0
elif self.alder >= 10:
print("Gå in om du törs!")
print(" ")
return 1
#åker attraktion frittfall lr bergodalbana
def aka(self):
print("")
print(self.val)
tal = random.randint(0,100)
if tal < 20:
print("åkturen gick åt skogen, bättre lycka nästa gång")
elif tal >= 20:
print("jabbadabbbadoooooooo")
return 1
#går i spökhuset
def aka1(self):
print("")
print(self.val)
tal = random.randint(0,100)
if tal < 20:
print("du är omringad av spöken och kan inte fortsätta") return 0
elif tal >= 20:
print("Buhuuuuuu, buuuhuuuu")
return 1
#programkod
print("Välkommen till nöjesfältet, vad vill du göra?")
print(" ")
while 1:
vald_attr = input("Vad vill du göra?\n1. frittfall\n2. bergodalbana\n3. spökhuset\n4. Avsluta\n")
if vald_attr == "1":
val = Nojesfalt(attraktioner[0])
if val.langdgrans() == 1:
val.aka()
elif vald_attr == "2":
val = Nojesfalt(attraktioner[1])
val.aka()
elif vald_attr == "3":
val = Nojesfalt(attraktioner[2])
if val.aldersgrans() == 1:
val.aka1()
elif vald_attr == "4":
break
Odpowiedzi:
Nie używaj kart.
Uwaga: Powodem wprowadzenia 8 spacji dla tabulatorów jest natychmiastowe zauważenie, kiedy tabulatory zostały wstawione przypadkowo - na przykład podczas kopiowania i wklejania z przykładowego kodu, który używa tabulatorów zamiast spacji.
źródło
Użycie
autopep8
poniższego polecenia naprawiło to dla mnie:Dokumentacja do
autopep8
linku tutaj.źródło
Za pomocą edytora IDLE możesz użyć tego:
ź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 Anacondy otwórz plik w Sublime Text, kliknij prawym przyciskiem myszy na puste przestrzenie → wybierz Anaconda → kliknij autoformatowanie. Sporządzono . Lub naciśnij Ctrl+ Alt+ R.
źródło
Ogólnie ludzie wolą wcięcia w przestrzeń. Jest bardziej spójny w różnych edytorach, co powoduje mniej niezgodności tego rodzaju. Można jednak wciąć klawiszem tab. To Twój wybór; należy jednak pamiętać, że standard 8 spacji na zakładkę jest nieco szeroki.
Jeśli chodzi o twój problem, najprawdopodobniej twój redaktor się pomylił. Aby przekonwertować tabulator na spację, naprawdę zależy od edytora.
Na przykład w Emacsie możesz wywołać metodę „untabify”.
W wierszu poleceń możesz użyć linii sed (dostosuj liczbę spacji do tego, co ci się podoba):
źródło
Podczas korzystania z wysublimowanego edytora tekstu byłem w stanie wybrać segment mojego kodu, który dał mi
inconsistent use of tabs and spaces in indentation
błąd i wybrać:view > indentation > convert indentation to spaces
co rozwiązało problem dla mnie.
źródło
Co zrobiłem, gdy pojawił się ten sam błąd: Wybierz wszystko ( Str+ A) i naciśnij Shift+ Tab. Nic już nie było wcięte. Teraz wróć do linii, które chcesz wciąć, i umieść to z powrotem tak, jak chcesz.
To działało dla mnie ...
źródło
Niedawno miałem ten sam problem i dowiedziałem się, że po prostu muszę przekonwertować zestaw znaków pliku .py na UTF-8 zestaw ponieważ jest to zestaw, którego używa Python 3.
BTW, cały czas używałem 4-spacji, więc problem nie był przez nich spowodowany.
źródło
Podniosły tekst 3
W Sublime Text, PODCZAS edycji do Pythona pliku:
Menu Podniosły tekst > Preferencje > Ustawienia - Specyficzne dla składni :
Ustawienia Python.sublime
źródło
Można rozwiązać ten problem
notepad++
, zastępując Tabs 4 Spaces:źródło
Miałem ten problem. Rozwiązanie: „tab” przed wierszem problemu to spacje, 4, 6 lub 8 spacji. Powinieneś je usunąć i wstawić TAB. „\ t”. To wszystko.
źródło
Używam Notepad ++ i dostałem ten błąd.
W Notepad ++ zobaczysz, że zarówno tab, jak i cztery spacje są takie same, ale kiedy skopiujesz swój kod do Python IDLE , zobaczysz różnicę, a linia z tabulacją będzie miała przed sobą więcej miejsca niż inne.
Aby rozwiązać problem, po prostu usunąłem tabulator przed linią, a następnie dodałem cztery spacje.
źródło
Miałem ten sam błąd. Musiałem dodać kilka linii kodu do istniejącego pliku * .py. W Notepad ++ to nie działało.
Po dodaniu wierszy kodu i zapisaniu otrzymałem ten sam błąd. Kiedy otworzyłem ten sam plik w PyCharm i dodałem linie, błąd zniknął.
źródło
Dostałem te same błędy, ale nie mogłem zrozumieć, co robiłem źle.
Naprawiłem to, uruchamiając automatyczne wcięcie w moim kodzie i pozwalając maszynie naprawić mój błąd.
Jeśli ktoś zastanawia się, jak to zrobiłem. Prosty. Idź w vim. Wpisz G = gg.
To automatycznie wszystko naprawi. Powodzenia :)
źródło
Twój problem wynika z ograniczeń / konfiguracji edytora. Niektóre edytory zapewniają narzędzia pomocne w rozwiązaniu problemu poprzez:
Konwersja tabulatorów na spacje
Na przykład, jeśli używasz edytora Pythona Stani, możesz go skonfigurować tak, aby robił to przy zapisywaniu.
Przekształcanie spacji w tabulatory
Jeśli używasz ActiveState Komodo, masz narzędzie do „tabify” kodu. Jak już zauważyli inni, nie jest to dobry pomysł.
Pydev w Eclipse udostępnia funkcje „Konwertuj tabulatory na spacje” i „Konwertuj spacje na tabulatory”.
źródło
Jeśli Twój edytor nie rozpoznaje tabulatorów podczas wyszukiwania i zamiany (jak SciTE), możesz wkleić kod do Worda i wyszukać za pomocą Ctr-H i ^ t, który znajdzie tabulatory, które następnie można zastąpić 4 spacjami.
źródło
Odtąd było duplikat tego pytania , ale pomyślałem, że zaoferuję pogląd na nowoczesne edytory i szeroki wachlarz funkcji, które oferują. W przypadku kodu Pythona wszystko, co musi być zamierzone w
.py
pliku, musi być intentowane za pomocą klawisza Tab lub spacji. Konwencja ma używać czterech spacji do wcięcia. Większość edytorów ma możliwość wizualnego pokazania w edytorze, czy kod jest wcięty spacjami czy tabulatorami, co znacznie pomaga w debugowaniu. Na przykład z atomem, przechodząc do preferencji, a następnie edytora, możesz zobaczyć dwie następujące opcje:Następnie, jeśli kod używa spacji, zobaczysz małe kropki w miejscu wcięcia kodu:
A jeśli jest wcięty za pomocą tabulatorów, zobaczysz coś takiego:
Teraz, jeśli zauważyłeś, możesz zauważyć, że podczas korzystania z tabulatorów po lewej stronie jest więcej błędów / ostrzeżeń, jest to spowodowane czymś, co nazywa się dokumentacją pep8 pep8 , która jest w zasadzie jednolitym przewodnikiem po stylu dla Pythona, dzięki czemu wszyscy programiści głównie kodują ten sam standard i wygląd, który pomaga przy próbie zrozumienia kodu innych ludzi, to w pep8 preferuje użycie spacji zamiast wcięć zamiast tabulatorów. Widzimy też, jak edytor pokazuje ostrzeżenie związane z kodem ostrzegawczym pep8
W191
,Mam nadzieję, że wszystko powyższe pomoże ci zrozumieć naturę problemu, który masz i jak temu zapobiec w przyszłości.
źródło
Czasami
tab
psuje się podczas wcięcia. Jednym ze sposobów jest oczywiście użycietab
ibackspace
poprawne wcięcie kodu.Innym sposobem jest użycie
space
4 razy (w zależności od tego, ile chcesz wcięcia).Dziwny sposób, który działał dla mnie, gdy nic innego nie działało, bez względu na linię, w której pojawia się błąd, przesuwałem
backspaced
tę linię do poprzedniej linii, a następnie nacisnąłementer
. Automatycznie wcięło linię do prawidłowej pozycji i po tym nie otrzymałem żadnego błędu.Mam nadzieję, że to powinno pomóc.
źródło
Miałem ten sam problem i naprawiłem go za pomocą następującego skryptu Python. mam nadzieję, że pomoże innym.
wynika to z używania tabulatorów i spacji do wcięcia kodu. w tym skrypcie zastępuję każdą kartę czterema spacjami.
jeśli używasz wzniosłego lub innego edytora, który daje ci narzędzie do zamiany tekstu, możesz zastąpić wszystkie tabulatory czterema spacjami w edytorze.
źródło
Użyj, Idle dla python lub Idle3 dla python3.
źródło
Rozwiązanie tego za pomocą edytora Vima
cd <path_to_your_directory>
). Npcd /home/vineeshvs/work
. :vim <file_name>
). Npvim myfile.txt
. ::set hlsearch
):<line_number>
). Np .::53
w edytorze Vima po jednokrotnym naciśnięciu ESCprzycisku.:.,$s/\t/<give_as_many_spaces_as_you_want_to_replace_tab>/gc
). Np .: Tab zostanie zastąpiony czterema spacjami przy użyciu następującego polecenia::.,$s/\t/ /gc
po jednokrotnym naciśnięciu ESC przycisku). Ten proces jest interaktywny. Możeszy
zamienić kartę na spację in
pominąć konkretną zamianę. Naciśnij ESCpo zakończeniu wymaganych wymian.źródło
Dziwnie napotkałem podobny problem z jednym z moich plików .py. Po prostu otworzyłem plik w Pycharmie i nacisnąłem
Option
+Command
+,L
który poprawnie formatuje zawartość pliku za jednym razem.Podejrzewam, że miałem kłopoty, ponieważ kodowałem ten konkretny plik .py w laboratoriach jupyter, w przeciwieństwie do mojego zwykłego wyboru wysublimowanego tekstu lub Pycharm, i dlatego napotkałem pewne ukryte problemy z wcięciami, w których wiele odpowiedzi odnosiło się tutaj
źródło
Cóż, miałem ten sam problem i zdałem sobie sprawę, że problem polega na tym, że skopiowałem kod z innego edytora Pythona do sublime.
Pracowałem z notatnikiem jupyter, a następnie skopiowałem kod do wzniosłego. Najwyraźniej po dokonaniu określonych modyfikacji (takich jak przenoszenie kodu w funkcjach) wcięcie staje się nieuporządkowane i stąd pochodzi problem.
Więc po prostu trzymaj się jednego edytora. Jeśli to zrobisz, nie będziesz mieć problemu.
źródło
Skorzystaj z
pylint
niego, a otrzymasz szczegółowy raport o tym, ile miejsca potrzebujesz i gdzie.źródło
Jeśli używasz ATOM:
Idź do Menu: Pakiety -> WhiteSpace -> Konwertuj wszystkie karty na spacje
źródło
Spróbuj usunąć wcięcia, a następnie systematycznie naciskając klawisz Tab lub naciskając klawisz 4 razy. Zwykle dzieje się tak, gdy mam wcięcie za pomocą klawisza tab, a następnie klawisz spacji w następnym wierszu.
źródło
Zaznacz wcięte bity, a następnie kliknij karty. Będą wtedy spójne :)
źródło