IndentationError: unindent komt niet overeen met een buitenste inspringingsniveau

Als ik de onderstaande Python-code compileer, krijg ik

IndentationError: unindent komt niet overeen met een buitenste inspringingsniveau


import sys
def Factorial(n): # Return factorial
    result = 1
    for i in range (1,n):
        result = result * i
    print "factorial is ",result
    return result

Waarom?


Antwoord 1, autoriteit 100%

Andere posters zijn waarschijnlijk correct…er kunnen spaties tussen uw tabbladen staan. Probeer een zoekopdracht uit te voeren & vervangen om alle tabbladen te vervangen door een paar spaties.

Probeer dit:

import sys
def Factorial(n): # return factorial
    result = 1
    for i in range (1,n):
        result = result * i
    print "factorial is ",result
    return result
print Factorial(10)

Antwoord 2, autoriteit 39%

BELANGRIJK:
Spaces hebben de voorkeur– zie PEP008 Indentation en Tabs of Spaces?. (Met dank aan @Siha hiervoor.)

Voor gebruikers van Sublime Text:

Stel Sublime Textin om tabs te gebruiken voor inspringen:
View–> Indentation–> Convert Indentation to Tabs

Deselecteer ook de optie Indent Using Spacesin hetzelfde submenu hierboven.
Dit zal dit probleem onmiddellijk oplossen.


Antwoord 3, autoriteit 19%

Om gemakkelijk te controleren op problemen met tabbladen/spaties, kunt u dit doen:

python -m tabnanny yourFile.py

of je kunt je editor natuurlijk gewoon correct instellen 🙂


Antwoord 4, autoriteit 6%

Weet u zeker dat u geen tabs en spaties door elkaar gebruikt in uw inspringende witruimte? (Dat zal die fout veroorzaken.)

Opmerking, het wordt aanbevolen geen tabbladen te gebruiken in Python-code. Zie de stijlgids. U moet Notepad++ configureren om spaties voor tabbladen in te voegen.


Antwoord 5, autoriteit 3%

Als ik deze fout ben tegengekomen, komt dat omdat ik op de een of andere manier tabs en spaties door elkaar heb gehaald in mijn editor.


Antwoord 6, autoriteit 2%

Als je de IDLE-editor van Python gebruikt, kun je doen wat wordt voorgesteld in een van de vergelijkbare foutmeldingen:

1) alles selecteren, bijv. Ctrl+ A

2) Ga naar Opmaak -> Regio deactiveren

3) Controleer nogmaals of uw inspringing nog steeds correct is, sla het programma op en voer het opnieuw uit.

Ik gebruik Python 2.5.4


Antwoord 7, autoriteit 2%

Als je Vim gebruikt, druk je op escape en typ je

gg=G

Hiermee wordt alles automatisch ingesprongen en worden eventuele spaties gewist.


Antwoord 8

De regel: result = result * imoet worden ingesprongen (het is de hoofdtekst van de for-loop).

Of – u heeft een combinatie van spaties en tabtekens


Antwoord 9

Op Atom

ga naar

Packages > Whitespace > Convert Spaces to Tabs

Controleer dan nogmaals de inspringing van uw bestand:

python -m tabnanny yourFile.py

of

>python
>>> help("yourFile.py")

Antwoord 10

Als je kladblok++ gebruikt, doe dan een “vervang” met uitgebreide zoekmodus om \t te vinden en vervang door vier spaties.


Antwoord 11

Voor Spyder-gebruikers ga naar
Bron > Inspringing repareren
om het probleem onmiddellijk op te lossen


Antwoord 12

Het lijkt op een inspringingsprobleem. U hoeft in Python geen accolades te matchen, maar u welmoet wel overeenkomen met de inspringingsniveaus.

De beste manier om spatie-/tabproblemen te voorkomen, is door onzichtbare tekens in uw teksteditor weer te geven. Dit geeft u een snelle manier om inspringingsgerelateerde fouten te voorkomen en/of op te lossen.

Bovendien is het injecteren van gekopieerde code een veelvoorkomende oorzaak voor dit soort problemen.


Antwoord 13

Gewoon een toevoeging. Ik had een soortgelijk probleem met beide inspringingen in Notepad++.

  1. Ongelimiteerde inspringing
  2. Buitenste inspringingsniveau

    Ga naar —-> Tabblad Zoeken —-> tik op vervangen—-> druk op het keuzerondje Uitgebreidhieronder —> Vervang nu \t door vier spaties

    Ga naar —-> Tabblad Zoeken —-> tik op vervangen—-> druk op het keuzerondje Uitgebreidhieronder —> Vervang nu \n door niets


Antwoord 14

Ik gebruikte een Jupyter-notebook en probeerde bijna alle bovenstaande oplossingen (die zich aanpasten aan mijn scenario) tevergeefs. Ik ging toen regel voor regel, verwijderde alle spaties voor elke regel en vervangen door tab. Dat loste het probleem op.


Antwoord 15

Visual Studio-code gebruiken

Als je vs code than gebruikt, zal het alle gemengde inspringingen naar spatie of tabs converteren met behulp van deze eenvoudige stappen hieronder.

  1. druk op Ctrl + Shift + p

  2. typ indent using spaces

  3. Druk op Enter


Antwoord 16

Voor wat het waard is, mijn docstring was te veel ingesprongen en dit geeft ook dezelfde fout

class junk: 
     """docstring is indented too much""" 
    def fun(): return   

IndentationError: unindent does not match any outer indentation level


Antwoord 17

voor Atom-gebruikers, Packages ->whitspace -> remove trailing whitespaces
dit werkte voor mij


Antwoord 18

Ik gebruik Sublieme tekstin Ubuntu OS. Ga naar

. om dit probleem op te lossen

bekijk -> Inspringing -> zet inspringing om in tabbladen


Antwoord 19

Het kan zijn dat de functie erboven niet op dezelfde manier is ingesprongen.
d.w.z.

class a:
    def blah:
      print("Hello world")
    def blah1:
      print("Hello world")

Antwoord 20

Dit komt omdat er een verwisseling is van zowel tabbladen als spaties.
Je kunt ofwel alle spaties verwijderen en ze vervangen door tabs.

Of,
Probeer dit te schrijven:

#!/usr/bin/python -tt

aan het begin van de code. Deze regel lost eventuele verschillen tussen tabs en spaties op.


Antwoord 21

Ik had gisteren hetzelfde probleem, het was een inspringfout, ik gebruikte een sublieme teksteditor. kostte mijn uren om het te repareren en uiteindelijk heb ik de code naar de VI-teksteditor gekopieerd en het werkte gewoon prima. ps python is te gevoelig voor witruimte, zorg ervoor dat u geen spatie en tab door elkaar gebruikt.


Antwoord 22

Omdat ik me realiseer dat er geen specifiek antwoord is voor spyder, zal ik er een toevoegen:
Kijk in principe zorgvuldig naar uw if-statement en zorg ervoor dat alle if, elifen elsedezelfde spatiëring hebben als is dat ze aan het begin in dezelfde regel staan, zoals zo:

def your_choice(answer):
    if answer>5:
        print("You're overaged")
    elif answer<=5 and answer>1: 
            print("Welcome to the toddler's club!")
    else:
            print("No worries mate!")

Antwoord 23

Ik had een functie gedefinieerd, maar deze had geen inhoudbehalve de functieopmerkingen…

def foo(bar):
    # Some awesome temporary comment.
    # But there is actually nothing in the function!
    # D'Oh!

Het schreeuwde:

 File "foobar.py", line 69
                                ^
IndentationError: expected an indented block

(merk op dat de regel waar de ^markering naar wijst leeg is)

Meerdere oplossingen:

1: Reageer gewoon op de functie

2: Functieopmerking toevoegen

def foo(bar):
    '' Some awesome comment. This comment could be just one space.''

3: regel toevoegen die niets doet

def foo(bar):
    0

Zorg er in ieder geval voor dat u duidelijk maaktwaaromhet een lege functie is – voor uzelf of voor uw collega’s die uw code zullen gebruiken


Antwoord 24

Ten eerste, gewoon om u eraan te herinneren, is er een logische fout die u beter blijft houden = 1 of anders is uw uitvoer het resultaat = 0, zelfs nadat de lus wordt uitgevoerd.

Ten tweede kunt u het als volgt schrijven:

import sys
def Factorial(n): # Return factorial
  result = 0
  for i in range (1,n):
     result = result * i
  print "factorial is ",result
  return result

Een lijn verlaten, vertelt de Python Shell dat de voor uitspraken zijn geëindigd. Als je ervaring hebt met behulp van de Python Shell, kun je begrijpen waarom we een regel moeten verlaten.


Antwoord 25

Ik gebruik sublieme tekst 3 met een flesproject. Ik heb de fout opgelost met View & GT; INTENTING & GT; Tabbreedte: 4 Na niet-geselecteerd streepje met behulp van spaties


Antwoord 26

Ik heb deze foutmelding gekregen, ook al had ik geen tabbladen in mijn code, en de reden was er ergens in mijn code een overbodige sluiting van haakjes. Ik had dit eerder moeten ontdekken, omdat het vóór en na enkele gelijke tekens op en na enkele gelijke tekens zat … als je iets vindt, zelfs na het uitvoeren van Reformat codein je IDE (of handmatig autopep8), Nog zeker van al je haakjes match, beginnend achteruit van de rare spaties vóór / na het eerste gelijk aan teken.


Antwoord 27

In mijn geval was het probleem de configuratie van Pydev op Eclipse


Antwoord 28

Als u de Komodo-editor gebruikt, kunt u doen wat het voor suggereert in een van vergelijkbare foutmeldingen:

1) Selecteer alles, b.v. CTRL + A

2) Ga naar code – & GT; Regio Ongewenst

3) Dubbele controle Uw inspringing is nog steeds correct, opslaan en uw programma opnieuw opslaan.

Ik gebruik Python 3.4.2


Antwoord 29

Als u sublieme tekst voor Python-ontwikkeling gebruikt, kunt u de fout vermijden met behulp van het pakket Anaconda. Na installatie Anaconda,

  1. Open uw bestand in subliem
  2. Klik met de rechtermuisknop op de open ruimtes
  3. Kies Anaconda
  4. Klik op AutoFormat
  5. voltooid of druk op CTRL + ALT + R.

ANTWOORD 30

In Intellij met Python Plugin, CTRL + SHIFT + ALT om het document opnieuw te formatteren dat de inspringen / tab / spaties

is vastgesteld

Other episodes