Ik probeer een toepassing te maken in Python 3.2 en ik gebruik de hele tijd tabs voor inspringen, maar zelfs de editor verandert sommige ervan in spaties en print dan “inconsistent gebruik van tabs en spaties bij inspringen” uit wanneer ik probeer het programma uit te voeren.
Hoe kan ik de spaties in tabbladen veranderen? Het maakt me gek. (Ik ben een beginner in programmeren). Ik zou blij zijn als ik wat algemene tips over mijn code zou kunnen krijgen, als ik veel fouten heb gemaakt hoor ik het graag.
import random
attraktioner = ["frittfall","bergodalbana","spokhuset"]
class Nojesfalt:
def __init__(self, attraktion):
self.val = attraktion
self.langd = 0
self.alder = 0
#langdgrans for fritt fall
def langdgrans(self):
print("")
self.langd = int(input("Hur lang ar du i cm? "))
if self.langd < 140:
print("tyvarr, du ar for kort, prova nagot annat")
return 0
elif self.langd >= 140:
print("hall dig hatten, nu aker vi!")
print(" ")
return 1
#aldersgrans for spokhuset
def aldersgrans(self):
print("")
self.alder = int(input("Hur gammal ar du? "))
if self.alder < 10:
print("tyvarr, du ar for ung, prova nagot annat")
return 0
elif self.alder >= 10:
print("Ga in om du tors!")
print(" ")
return 1
#aker attraktion frittfall lr bergodalbana
def aka(self):
print("")
print(self.val)
tal = random.randint(0,100)
if tal < 20:
print("akturen gick at skogen, battre lycka nasta gang")
elif tal >= 20:
print("jabbadabbbadoooooooo")
return 1
#gar i spokhuset
def aka1(self):
print("")
print(self.val)
tal = random.randint(0,100)
if tal < 20:
print("du ar omringad av spoken och kan inte fortsatta") return 0
elif tal >= 20:
print("Buhuuuuuu, buuuhuuuu")
return 1
#programkod
print("Valkommen till nojesfaltet, vad vill du gora?")
print(" ")
while 1:
vald_attr = input("Vad vill du gora?\n1. frittfall\n2. bergodalbana\n3. spokhuset\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
Antwoord 1, autoriteit 100%
Gebruik geen tabbladen.
- Stel je editor in om 4 spaties te gebruiken voor inspringen.
- Voer een zoekopdracht uit en vervang om alle tabbladen te vervangen door 4 spaties.
- Zorg ervoor dat je editor is ingesteld om tabbladen weer te geven als 8 spaties.
Opmerking: De reden voor 8 spaties voor tabs is dat je meteen merkt wanneer tabs onbedoeld zijn ingevoegd – zoals bij het kopiëren en plakken van voorbeeldcode die tabs gebruikt in plaats van spaties.
Antwoord 2, autoriteit 36%
Het gebruik van de autopep8
-opdracht hieronder loste het voor mij op:
autopep8 -i my_file.py
Documentatie voor autopep8
hier gelinkt.
Antwoord 3, autoriteit 21%
Voor VSCode-gebruikers
Ctrl+Shift+P of View->Command Palette.
Type
>Inspringing omzetten naar spaties
druk op Enter.
Antwoord 4, autoriteit 13%
Met de IDLE-editor kun je dit gebruiken:
- Menu Bewerken > Alles selecteren
- Menu Formaat > Regio deactiveren
- Ervan uitgaande dat uw editor 8 spaties heeft vervangen door een tab, voert u 8 in het invoervak in.
- Druk op selecteren en het herstelt het hele document.
Antwoord 5, autoriteit 8%
Toen ik de sublieme teksteditor gebruikte, kon ik het segment van mijn code selecteren dat me de inconsistent use of tabs and spaces in indentation
gaf en selecteer:
view > indentation > convert indentation to spaces
die het probleem voor mij heeft opgelost.
Antwoord 6, autoriteit 5%
Als u Sublime Text gebruikt voor Python-ontwikkeling, kunt u de fout vermijden door de pakket Anaconda. Na het installeren van Anaconda, open je je bestand in Sublime Text, klik met de rechtermuisknop op de open ruimtes > kies Anaconda > klik op autoformat. Gereed. Of druk op Ctrl + Alt + R.
Antwoord 7, autoriteit 4%
Over het algemeen geven mensen de voorkeur aan inspringen met spatie. Het is consistenter tussen editors, wat resulteert in minder mismatches van dit soort. U mag echter wel inspringen met tab. Het is jouw keuze; u moet er echter rekening mee houden dat de standaard van 8 spaties per tabblad een beetje ruim is.
Wat uw probleem betreft, heeft uw redacteur hoogstwaarschijnlijk een fout gemaakt. Tab naar spatie converteren is echt afhankelijk van de editor.
Op Emacs kun je bijvoorbeeld de methode ‘untabify’ aanroepen.
Op de opdrachtregel kun je een sed-regel gebruiken (pas het aantal spaties aan wat je wilt):
sed -e 's;\t; ;' < yourFile.py > yourNedFile.py
Antwoord 8, autoriteit 4%
Het is mogelijk om dit probleem op te lossen met notepad++
door Tabs te vervangen door 4 Spaces:
- Kies Zoeken -> Zoeken… of druk op Ctrl + F
- Selecteer het tabblad Vervangen
- Kies in het vak met de naam Zoekmodus Uitgebreid(\n, \r, \t, \0, \x…)
- In het veld Vind wat: schrijf \t
- In het veld Vervangen door : druk je 4 keer op Spatie. Zorg ervoor dat er niets anders in dit veld staat.
- Klik op de knop Alles vervangen
Antwoord 9, autoriteit 2%
Wat ik deed toen dezelfde fout opdook: Selecteer alles (Str + A) en druk op Shift + Tab< /kbd>. Er was dus niets meer ingesprongen. Ga nu terug naar de regels die u wilt laten inspringen en plaats het terug zoals u het wilt.
Het werkte voor mij...
Antwoord 10, autoriteit 2%
Ik had onlangs hetzelfde probleem en kwam erachter dat ik alleen de tekenset van het .py-bestand moest converteren naar UTF-8, aangezien dat de set is die Python 3 gebruikt.
Trouwens, ik gebruikte de hele tijd tabs met 4 spaties, dus het probleem werd niet door hen veroorzaakt.
Antwoord 11, autoriteit 2%
Sublieme tekst 3
In Sublime Text, TERWIJL bewerken een Python-bestand:
Subliem tekstmenu > Voorkeuren > Instellingen - Syntaxisspecifiek :
Python.sublime-instellingen
{
"tab_size": 4,
"translate_tabs_to_spaces": true
}
Antwoord 12
Probeer de inspringingen te verwijderen en vervolgens systematisch 4 keer op tab of op spatie te drukken. Dit gebeurt me meestal wanneer ik een inspringing heb met de tab-toets en vervolgens de spatietoets in de volgende regel gebruik.
Antwoord 13
Uw probleem wordt veroorzaakt door de beperkingen/configuratie van uw editor. Sommige editors bieden u hulpmiddelen om het probleem op te lossen door:
-
Tabbladen converteren naar spaties
Als u bijvoorbeeld Stani's Python-editor gebruikt, kunt u deze configureren om dit te doen bij het opslaan.
-
Spaties omzetten in tabbladen
Als je ActiveState Komodo gebruikt, heb je een tool om je code te 'tabificeren'. Zoals anderen al aangaven, is dit geen goed idee.
Eclipse's Pydev biedt functies "Converteer tabs naar spatie-tabs" en "Converteer spatie-tabs naar tabs".
Antwoord 14
Ik gebruik Notepad++ en kreeg deze foutmelding.
In Notepad++ ziet u dat zowel het tabblad als de vier spaties hetzelfde zijn, maar wanneer u uw code kopieert naar Python IDLE je zou het verschil zien en de regel met een tabblad zou meer ruimte ervoor hebben dan de andere.
Om het probleem op te lossen, heb ik zojuist het tabblad voor de regel verwijderd en vervolgens vier spaties toegevoegd.
Antwoord 15
Ik had dezelfde fout. Ik moest verschillende coderegels toevoegen aan een bestaand *.py-bestand. In Notepad++ werkte het niet.
Na het toevoegen van de coderegels en het opslaan, kreeg ik dezelfde foutmelding. Toen ik hetzelfde bestand opende in PyCharm en de regels toevoegde, verdween de fout.
Antwoord 16
Gebruik pylint
dit geeft je een gedetailleerd rapport over hoeveel ruimtes je nodig hebt en waar.
Antwoord 17
Als je ATOM gebruikt:
Ga naar Menu: Pakketten --> WhiteSpace --> Converteer alle tabbladen naar spaties
Antwoord 18
Als je editor geen tabbladen herkent bij het zoeken en vervangen (zoals SciTE), kun je de code in Word plakken en zoeken met Ctr-H en ^t, die de tabbladen vindt die vervolgens kunnen worden vervangen door 4 spaties .
Antwoord 19
Er was een duplicaat van deze vraag van hier maar ik dacht dat ik een visie zou bieden die te maken heeft met moderne editors en de enorme reeks functies die ze bieden. Met python-code moet alles dat moet worden bedoeld in een .py
-bestand, ofwel allemaal bedoeld zijn met de tab-toets of met spaties. Conventie is om vier spaties te gebruiken voor een inspringing. De meeste editors hebben de mogelijkheid om visueel in de editor te laten zien of de code is ingesprongen met spaties of tabs, wat enorm helpt bij het debuggen. Als u bijvoorbeeld met atom naar voorkeuren en vervolgens naar editor gaat, ziet u de volgende twee opties:
Als uw code spaties gebruikt, ziet u kleine puntjes waar uw code is ingesprongen:
En als het is ingesprongen met behulp van tabbladen, ziet u zoiets als dit:
Als het je is opgevallen, kun je zien dat er bij het gebruik van tabbladen meer fouten/waarschuwingen aan de linkerkant zijn, dit komt door iets dat pep8 wordt genoemd pep8-documentatie, wat in feite een uniforme stijlgids voor python is, zodat alle ontwikkelaars meestal coderen naar dezelfde standaard en hetzelfde uiterlijk, wat helpt bij het proberen te begrijpen code van andere mensen, het is in pep8 die het gebruik van spaties verkiest om in te springen in plaats van tabs. En we kunnen zien dat de editor laat zien dat er een waarschuwing is met betrekking tot pep8-waarschuwingscode W191
,
Ik hoop dat al het bovenstaande u helpt de aard van het probleem dat u ondervindt te begrijpen en hoe u dit in de toekomst kunt voorkomen.
Antwoord 20
OPLOSSING VOOR SUBLIEME TEKST
Mijn oplossing voor dit probleem was om het te openen in de inactieve editor en dan zal de inactieve editor uw probleem ontdekken
bijv.
SUBLIEME TEKST
while run:
clock.tick(27)
milli = clock.tick()
seconds = milli/1000
timeForLevel += seconds
print(timeForLevel)
IDLE EDITOR
while run:
clock.tick(27)
milli = clock.tick()
seconds = milli/1000
timeForLevel += seconds
print(timeForLevel)
Ik zeg niet dat je alleen een inactieve editor moet gebruiken. Ik zeg dat als je die fout krijgt, je de inactieve editor moet controleren
Antwoord 21
Ik kreeg dezelfde fouten, maar ik kon niet achterhalen wat ik verkeerd deed.
Dus ik heb het opgelost door auto-indent op mijn code uit te voeren en de machine mijn fout te laten herstellen.
Als iemand zich afvraagt hoe ik dat heb gedaan.
Gemakkelijk.
Ga in vim.
Typ G=gg.
Hiermee wordt alles automatisch opgelost. Veel succes 🙂
Antwoord 22
Soms verprutst het tab
tijdens het inspringen. Eén manier is om uiteraard de tab
en backspace
te gebruiken om de code correct te laten inspringen.
Een andere manier is om space
4 keer te gebruiken (afhankelijk van hoeveel je wilt laten inspringen).
Een rare manier die voor mij werkte toen niets anders werkte, welke regel ik ook de fout kreeg, ik backspaced
die regel naar de vorige regel en vervolgens op enter
drukte. Het deed automatisch de regel inspringen om de positie te corrigeren en daarna kreeg ik geen foutmelding.
Hopelijk zou dit moeten helpen.
Antwoord 23
Ik had hetzelfde probleem en heb het opgelost met het volgende python-script.
hoop dat het anderen helpt.
het komt door het gebruik van tabs en spaties voor het inspringen van code.
in dit script vervang ik elk tabblad door vier spaties.
input_file = "source code path here" # e.g. source.py
output_file = "out put file path here" # e.g out.py
with open(input_file, 'r') as source:
with open(output_file, 'a+') as result:
for line in source:
line = line.replace('\t', ' ')
result.write(line)
Als je sublime of een andere editor gebruikt die je de tool geeft om tekst te vervangen, kun je alle tabs vervangen door vier spaties vanuit de editor.
Antwoord 24
Dit oplossen met de Vim-editor
- Terminal openen (Ctrl + Alt + T).
- Ga naar de map waar het bestand zich bevindt (
cd <path_to_your_directory>
). Bijvoorbeeld:cd /home/vineeshvs/work
. - Open het bestand in Vim (
vim <file_name>
). Bijvoorbeeld:vim myfile.txt
. - [Optionele stap] Markering van zoektermen inschakelen in Vim (ESC
:set hlsearch
) - Ga naar de regel waar je dit probleem hebt (ESC
:<line_number>
). Bijvoorbeeld::53
in de Vim-editor nadat u eenmaal op de knop ESC heeft gedrukt. - Vervang tabbladen met het vereiste aantal spaties in Vim (
:.,$s/\t/<give_as_many_spaces_as_you_want_to_replace_tab>/gc
). Bijv.: Tab wordt vervangen door vier spaties met het volgende commando::.,$s/\t/ /gc
nadat u eenmaal op de knop ESC hebt gedrukt). Dit proces is interactief. Je kunty
geven om het tabblad te vervangen door spaties enn
om een bepaalde vervanging over te slaan. Druk op ESC als u klaar bent met de vereiste vervangingen.
Antwoord 25
Ik kwam vreemd genoeg een soortgelijk probleem tegen met een van mijn .py-bestanden. Ik opende gewoon het bestand in Pycharm en drukte op Option
+Command
+L
waarmee de bestandsinhoud in één keer correct wordt geformatteerd.
Ik vermoed dat ik problemen had omdat ik dit specifieke .py-bestand via jupyter-labs heb gecodeerd in tegenstelling tot mijn gebruikelijke keuze voor sublieme tekst of Pycharm en daarom tegen een aantal verborgen inspringingsproblemen aanliep waar veel antwoorden hier op gezinspeeld hebben
Antwoord 26
Nou, ik had hetzelfde probleem en ik realiseerde me dat het probleem is dat ik code van een andere python-editor heb gekopieerd naar subliem.
Ik werkte met jupyter notebook en daarna kopieerde ik de code naar subliem. Blijkbaar wordt het inspringen rommelig als je specifieke wijzigingen aanbrengt (zoals het verplaatsen van code in functies), en dit is waar het probleem vandaan komt.
Dus blijf bij één editor. Als je dat doet, heb je geen probleem.
Antwoord 27
De volgende truc heeft voor mij gewerkt:
- Kopieer en plak de code in het kladblok.
- Selecteer vervolgens opnieuw alles vanuit het notitieblok en kopieer de code
- Plakken in mijn views.py
- Selecteer alle nieuw geplakte code in views.py en verwijder alle tabbladen door op shift+tab te drukken vanaf het toetsenbord
- Gebruik nu opnieuw de tab-toets om de juiste inspringing
te gebruiken