“inconsistent gebruik van tabs en spaties bij inspringen”

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.

  1. Stel je editor in om 4 spaties te gebruiken voor inspringen.
  2. Voer een zoekopdracht uit en vervang om alle tabbladen te vervangen door 4 spaties.
  3. 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:

  1. Kies Zoeken -> Zoeken… of druk op Ctrl + F
  2. Selecteer het tabblad Vervangen
  3. Kies in het vak met de naam Zoekmodus Uitgebreid(\n, \r, \t, \0, \x…)
  4. In het veld Vind wat: schrijf \t
  5. In het veld Vervangen door : druk je 4 keer op Spatie. Zorg ervoor dat er niets anders in dit veld staat.
  6. Klik op de knop Alles vervangen

Tabbladen vervangen door spaties


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:

  1. Tabbladen converteren naar spaties

    Als u bijvoorbeeld Stani's Python-editor gebruikt, kunt u deze configureren om dit te doen bij het opslaan.

  2. 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:

atom-editor om tabbladen en spaties weer te geven

Als uw code spaties gebruikt, ziet u kleine puntjes waar uw code is ingesprongen:

voer hier de afbeeldingsbeschrijving in

En als het is ingesprongen met behulp van tabbladen, ziet u zoiets als dit:

voer hier de afbeeldingsbeschrijving in

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

  1. Terminal openen (Ctrl + Alt + T).
  2. Ga naar de map waar het bestand zich bevindt (cd <path_to_your_directory>). Bijvoorbeeld: cd /home/vineeshvs/work.
  3. Open het bestand in Vim (vim <file_name>). Bijvoorbeeld: vim myfile.txt .
  4. [Optionele stap] Markering van zoektermen inschakelen in Vim (ESC :set hlsearch)
  5. 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.
  6. 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 kunt y geven om het tabblad te vervangen door spaties en n 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:

  1. Kopieer en plak de code in het kladblok.
  2. Selecteer vervolgens opnieuw alles vanuit het notitieblok en kopieer de code
  3. Plakken in mijn views.py
  4. Selecteer alle nieuw geplakte code in views.py en verwijder alle tabbladen door op shift+tab te drukken vanaf het toetsenbord
  5. Gebruik nu opnieuw de tab-toets om de juiste inspringing
  6. te gebruiken

LEAVE A REPLY

Please enter your comment!
Please enter your name here

ten + six =

Other episodes