Wat te doen met Onverwachte inspringing in python?

Hoe herstel ik de fout “onverwachte inspringing” in python?


Antwoord 1, autoriteit 100%

Python gebruikt spaties aan het begin van de regel om te bepalen wanneer codeblokken beginnen en eindigen. Fouten die u kunt krijgen zijn:

Onverwachte inspringing. Deze regel code heeft meer spaties aan het begin dan de vorige, maar de vorige is niet het begin van een subblok (bijv. if/while/for statement). Alle regels code in een blok moeten beginnen met exact dezelfde reeks witruimte. Bijvoorbeeld:

>>> def a():
...   print "foo"
...     print "bar"
IndentationError: unexpected indent

Deze komt vooral veel voor bij het interactief uitvoeren van python: zorg ervoor dat je geen extra spaties voor je commando’s plaatst. (Heel vervelend bij het kopiëren en plakken van voorbeeldcode!)

>>>   print "hello"
IndentationError: unexpected indent

Unindent komt met geen enkel buitenste inspringingsniveau overeen. Deze regel code heeft minder spaties aan het begin dan de vorige, maar komt evenmin overeen met een ander blok waarvan het deel zou kunnen uitmaken. Python kan niet beslissen waar het heen gaat. Bijvoorbeeld, in het volgende, moet de uiteindelijke afdruk deel uitmaken van de if-clausule, of niet?

>>> if user == "Joey":
...     print "Super secret powers enabled!"
...   print "Revealing super secrets"
IndendationError: unindent does not match any outer indentation level

Verwacht een ingesprongen blok. Deze regel code heeft hetzelfde aantal spaties aan het begin als de vorige, maar de laatste regel zou een blok beginnen (bijv. if/while/for statement, functiedefinitie).

>>> def foo():
... print "Bar"
IndentationError: expected an indented block

Als je een functie wilt die niets doet, gebruik dan het “no-op” commando pass:

>>> def foo():
...     pass

Het mixen van tabs en spaties is toegestaan ​​(tenminste in mijn versie van Python), maar Python gaat ervan uit dat tabs 8 tekens lang zijn, wat mogelijk niet overeenkomt met je editor. Zeg gewoon “nee” tegen tabs. De meeste editors laten ze automatisch vervangen door spaties.

De beste manier om deze problemen te vermijden, is door altijd een consistent aantal spaties te gebruiken wanneer u een subblok inspringt, en idealiter een goede IDE te gebruiken die het probleem voor u oplost. Dit maakt je code ook leesbaarder.


Antwoord 2, autoriteit 16%

In Python is de spatiëring erg belangrijk, dit geeft de structuur van je codeblokken.
Deze fout treedt op wanneer u uw codestructuur verknoeit, bijvoorbeeld als volgt:

def test_function() :
   if 5 > 3 :
   print "hello"

Misschien heb je ook een combinatie van tabs en spaties in je bestand.

Ik raad u aan een python-syntaxisbewuste editor te gebruiken, zoals PyScripter of Netbeans


Antwoord 3, autoriteit 14%

Voer uw code uit met de optie -tt om te zien of u inconsequent tabs en spaties gebruikt


Antwoord 4, autoriteit 12%

Schakel zichtbare witruimte in in de editor die u gebruikt en schakel tabs vervangen door spaties in.

Hoewel je tabbladen met Python kunt gebruiken, leidt het mixen van tabbladen en spatie meestal tot de fout die je ervaart. Tabbladen vervangen door 4 spaties is de aanbevolen aanpak voor het schrijven van Python-code.


Antwoord 5, autoriteit 6%

Door de juiste inspringing te gebruiken. Python is zich bewust van witruimte, dus je moet de inspringrichtlijnen voor blokken volgen, anders krijg je inspringfouten.


Antwoord 6, autoriteit 4%

Als je Python schrijft met Sublime en inspringfouten krijgt,

bekijk -> inspringing -> zet inspringing om in spaties

Het probleem dat ik beschrijf wordt veroorzaakt door de Sublime-teksteditor. Hetzelfde probleem kan ook door andere editors worden veroorzaakt. In wezen heeft het probleem te maken met Python die inspringingen wil behandelen in termen van spaties versus verschillende editors die de inspringingen coderen in termen van tabbladen.


Antwoord 7, autoriteit 3%

Zorg ervoor dat u de optie “spaties invoegen in plaats van tabbladen” in uw editor gebruikt. Dan kun je kiezen dat je een tabbreedte van bijvoorbeeld 4 wilt hebben. Die opties vind je in gedit onder edit–>preferences–>editor.

bottom line: GEBRUIK SPATIES, geen tabbladen


Antwoord 8, autoriteit 3%

Een probleem dat niet genoemd lijkt te zijn, is dat deze fout kan optreden als gevolg van een probleem met de code dat niets te maken heeft met inspringen.

Neem bijvoorbeeld het volgende script:

def add_one(x):
    try:
        return x + 1
add_one(5)

Dit geeft een IndentationError: unexpected unindent als het probleem natuurlijk een ontbrekende except:-instructie is.

Mijn punt: controleer de code hierboven waar het onverwachte (on)inspringen wordt gemeld!


Antwoord 9, autoriteit 3%

Voer het volgende commando uit om het op te lossen:

autopep8 -i <filename>.py

Hiermee wordt uw code bijgewerkt en worden alle inspringfouten opgelost 🙂

Ik hoop dat dit zal oplossen


Antwoord 10, autoriteit 2%

Deze fout kan ook optreden bij het plakken van iets in de Python-interpreter (terminal/console).

Houd er rekening mee dat de interpreter een lege regel interpreteert als het einde van een uitdrukking, dus als je iets plakt als

def my_function():
    x = 3
    y = 7

de interpreter interpreteert de lege regel vóór y = 7 als het einde van de uitdrukking, dat wil zeggen dat u klaar bent met het definiëren van uw functie, en de volgende regel – y = 7 zal een onjuiste inspringing hebben omdat het een nieuwe uitdrukking is.


Antwoord 11

Als de inspringing er goed uitziet, kijk dan of je editor een optie “Witruimte weergeven” heeft. Als u dit inschakelt, kunt u zien waar spaties en tabbladen worden gemengd.


Antwoord 12

Er is een truc die altijd voor mij heeft gewerkt:

Als je onverwachts inspringt en je ziet dat alle code perfect is ingesprongen, probeer het dan met een andere editor te openen en je zult zien welke regel code niet is ingesprongen.

Het overkwam me toen ik vim, gedit of dergelijke editors gebruikte.

Probeer slechts 1 editor voor je code te gebruiken.


Antwoord 13

Kopieer eenvoudig uw script en plaats onder “”” uw volledige code “”” …

geef deze regel op in een variabele.. zoals,

a = """ your python script """
print a.replace('here please press tab button it will insert some space"," here simply press space bar four times")
# here we replacing tab space by four char space as per pep 8 style guide..

Voer nu deze code uit, in Sublime Editor met ctrl+b, nu zal het ingesprongen code in de console afdrukken. dat is het


Antwoord 14

Het enige wat u hoeft te doen is spaties of tabspaties te verwijderen vanaf het begin van de volgende codes

from django.contrib import admin
# Register your models here.
from .models import Myapp
admin.site.register(Myapp)

Antwoord 15

Notepad++ gaf de tabruimte correct, maar het inspringingsprobleem werd uiteindelijk gevonden in de Sublime-teksteditor.

Gebruik de sublieme teksteditor en regel voor regel


Antwoord 16

Inspringing in Python is belangrijk en dit is alleen niet voor de leesbaarheid van de code, in tegenstelling tot veel andere programmeertalen.
Als er een witruimte of tab in uw code is tussen opeenvolgende opdrachten, geeft python deze fout omdat Python hier gevoelig voor is. We krijgen deze fout waarschijnlijk wanneer we code kopiëren en plakken naar een Python.
Zorg ervoor dat u deze spaties identificeert en verwijdert met een teksteditor zoals Notepad++ of handmatig de witruimte verwijdert uit de regel code waar u een foutmelding krijgt.

Step1 :Gives error 
L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]
print(L[2: ])
Step2: L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]print(L[2: ])
Step3: No error after space was removed
L = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]
print(L[2: ])
OUTPUT: [[7, 8, 9, 10]]

Bedankt!


Antwoord 17

Het hangt af van de context. Een ander scenario dat nog niet is behandeld, is het volgende. Laten we zeggen dat je één bestand hebt met een klasse met een specifieke methode erin

class Scraper:
    def __init__(self):
        pass
    def scrape_html(self, html: str):
        pass

en onderaan het bestand heb je zoiets als

if __name__ == "__main__":
    # some
    # commands
    # doing
    # stuff

het hele bestand er zo uit laten zien

class Scraper:
    def __init__(self):
        pass
    def scrape_html(self, html: str):
        pass
if __name__ == "__main__":
    # some
    # commands
    # doing
    # stuff

Als je in scrape_html() bijvoorbeeld een if/else-statement opent

class Scraper:
    def __init__(self):
        pass
    def scrape_html(self, html: str):
        if condition:
            pass
        else:
if __name__ == "__main__":
    parser = argparse.ArgumentParser()

Je moet pass of wat je maar wilt toevoegen aan die else-instructie, anders krijg je

Verwacht ingesprongen blok

voer hier de afbeeldingsbeschrijving in

Unindent niet verwacht

voer hier de afbeeldingsbeschrijving in

Verwachte uitdrukking

voer hier de afbeeldingsbeschrijving in

en op de eerste rij

Onverwachte inspringing

voer hier de afbeeldingsbeschrijving in

Het toevoegen van die pass zou al deze vier problemen oplossen.


Antwoord 18

Het hangt af van de context, maar een inspringfout wordt vaak veroorzaakt door het gebruik van tabs in plaats van spaties.

Hier zijn enkele stappen die u kunt nemen om dit te corrigeren:

  1. Kopieer de tabbladen of spaties die de fout veroorzaken
  2. Voer een zoek- en vervangopdracht uit in uw IDE (meestal Ctrl + H).
  3. Plak de gekopieerde tabs of spaties in de zoekbalk “Zoeken” en vervang ze allemaal door 4 spaties (ervan uitgaande dat uw IDE 4 spaties gebruikt als een “goede” inspringing)

Deze fout komt ook vaak voor als u code van externe bronnen kopieert en plakt in uw IDE, omdat de opmaak elders mogelijk niet overeenkomt met de definitie van uw IDE voor wat telt als een “goede” inspringing.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

two × 5 =

Other episodes