Waarom krijg ik “IndentationError: verwacht een ingesprongen blok”?

Ik krijg:

       elif index == "" :
        ^
    IndentationError: expected an indented block

Antwoord 1, autoriteit 100%

Zoals de foutmelding aangeeft, heb je een inspringfout. Het wordt waarschijnlijk veroorzaakt door een combinatie van tabs en spaties.


Antwoord 2, autoriteit 43%

Er zijn in feite meerdere dingen die u moet weten over inspringen in Python:

Python geeft echt om inspringen.

In veel andere talen is de inspringing niet nodig, maar verbetert de leesbaarheid. In Python vervangt inspringing het trefwoord begin / endof { }en is daarom noodzakelijk.

Dit wordt geverifieerd voordat de code wordt uitgevoerd, dus zelfs als de code met de inspringfout nooit wordt bereikt, zal het niet werken.

Er zijn verschillende inspringfouten en als je ze leest, helpt dat enorm:

1. “IndentationError: verwacht een ingesprongen blok”

Dit zijn twee belangrijke redenen waarom u zo’n fout kunt krijgen:

– Je hebt een “:” zonder een ingesprongen blok erachter.

Hier zijn twee voorbeelden:

Voorbeeld 1, geen ingesprongen blok:

Invoer:

if 3 != 4:
    print("usual")
else:

Uitvoer:

 File "<stdin>", line 4
    ^
IndentationError: expected an indented block

De uitvoer geeft aan dat u een ingesprongen blok op regel 4 moet hebben, na de else:-instructie

Voorbeeld 2, niet-ingesprongen blok:

Invoer:

if 3 != 4:
print("usual")

Uitvoer

 File "<stdin>", line 2
    print("usual")
        ^
IndentationError: expected an indented block

De uitvoer geeft aan dat u een ingesprongen blokregel 2 moet hebben, na de if 3 != 4:-instructie

– Je gebruikt Python2.x en hebt een mix van tabs en spaties:

Invoer

def foo():
    if 1:
        print 1

Houd er rekening mee dat er voor als er een tabblad is en voor het afdrukken 8 spaties zijn.

Uitvoer:

 File "<stdin>", line 3
    print 1
      ^
IndentationError: expected an indented block

Het is nogal moeilijk te begrijpen wat hier gebeurt, het lijkt erop dat er een inspringblok is… Maar zoals ik al zei, ik heb tabs en spaties gebruikt en dat zou je nooit moeten doen.

  • Je kunt hierwat informatie krijgen.
  • Verwijder alle tabbladen en vervang ze door vier spaties.
  • En configureer je editor om dat automatisch te doen.

2. “IndentationError: onverwachte inspringing”

Het is belangrijk om blokken in te laten springen, maar alleen blokken die moeten inspringen.
Dus eigenlijk zegt deze fout:

– U heeft een ingesprongen blok zonder een “:” ervoor.

Voorbeeld:

Invoer:

a = 3
  a += 3

Uitvoer:

 File "<stdin>", line 2
    a += 3
    ^
IndentationError: unexpected indent

De uitvoer geeft aan dat hij geen inspringblokregel 2 verwachtte, dan moet u deze verwijderen.

3. “TabError: inconsistent gebruik van tabs en spaties bij inspringen”(alleen python3.x)

  • Je kunt hierwat informatie krijgen.
  • Maar eigenlijk is het zo, je gebruikt tabs en spaties in je code.
  • Dat wil je niet.
  • Verwijder alle tabbladen en vervang ze door vier spaties.
  • En configureer je editor om dat automatisch te doen.

Om uiteindelijk op uw probleem terug te komen:

Kijk naar het regelnummer van de fout en los het op met behulp van de vorige informatie.


Antwoord 3, autoriteit 3%

Ik had hetzelfde probleem en ontdekte (via dit antwoord op een vergelijkbare vraag) dat het probleem was dat ik de docstring niet goed inspringen. Helaas geeft IDLE hier geen nuttige feedback, maar toen ik de inspringing van de docstring herstelde, was het probleem verdwenen.

Specifiek — slechte code die inspringfouten genereert:

def my_function(args):
"Here is my docstring"
    ....

Goede code die inspringfouten voorkomt:

def my_function(args):
    "Here is my docstring"
    ....

Opmerking: ik zeg niet dat dit ishet probleem, maar dat het zou kunnen zijn, want in mijn geval was dat het geval!


Antwoord 4

in python bedoeld blok betekent dat alles moet worden geschreven op de manier in mijn geval heb ik het op deze manier geschreven

def btnClick(numbers):
 global operator
 operator = operator + str(numbers)
 text_input.set(operator)

Opmerking. Het geeft me een fout, totdat ik het op deze manier heb geschreven, zodat “spaties geven” me een blok geeft terwijl ik je probeer te laten zien in de functie onder de code

def btnClick(numbers):
___________________________
|global operator
|operator = operator + str(numbers)
|text_input.set(operator)

Antwoord 5

Misschien wilt u uw spaties en tabbladen controleren. Een tab is standaard 4 spaties. Uw “als” en “elif” komen echter overeen, dus ik weet niet precies waarom. Ga naar Opties in de bovenste balk en klik op “Configureer IDLE”. Controleer de inspringingsbreedte aan de rechterkant in Lettertypen/Tabs en zorg ervoor dat uw inspringingen zoveel spaties bevatten.


Antwoord 6

Dit is slechts een probleem met inspringen, aangezien Python erg streng is als het erop aankomt.

Als u Sublimegebruikt, kunt u alles selecteren, rechtsonder naast ‘Python’ klikken en ervoor zorgen dat u ‘Inspringen met spaties’ aanvinkt en uw tabbladbreedte kiest om consistent te zijn. Converteer inspringing naar spaties om alle tabbladen om te zetten in spaties.

Other episodes