Indrag är en viktig egenskap hos läsbar, underhållbar kod, men få språk tillämpar den. Python är en av de få.

Om Python fastställer att din kod är felaktigt indragen, kommer du att se meddelandet "IndentationError" när du kör din kod. Men hur åtgärdar man detta, och hur förhindrar man det i framtiden?

Varför får du IndentationError i Python?

Felet "IndentationError: förväntat ett indraget block" är något du sannolikt kommer att se när du först börjar använda Python, särskilt om du kommer från ett annat programmeringsspråk.

De detaljerna för Pythons indragsregler är komplexa, men de kokar ner till en sak: indragskod i block. Detta gäller funktioner, if-satser och så vidare. Här är ett exempel på felaktigt formaterad Python-kod:

fname = "Gaurav"
lname = "Siyal"

om fname == "Gaurav" och lname == "Siyal":
print("Du är Gaurav")
annan:
print ("Du är någon annan")

När du försöker köra ovanstående kod får du ett meddelande så här:

 Filen "tmp.py", rad 5
print("Du är Gaurav")
^
IndentationError: förväntade sig ett indraget block
instagram viewer

Istället bör du lägga till antingen en tabb eller en serie mellanslag i början av de två raderna som representerar block:

fname = "Gaurav"
lname = "Siyal"

om fname == "Gaurav" och lname == "Siyal":
print("Du är Gaurav")
annan:
print ("Du är någon annan")

Om du drar in med blanksteg kan du faktiskt använda vilket nummer du vill, så länge du är konsekvent och entydig. De flesta programmerare använder två, fyra eller åtta mellanslag.

Vanliga fall av korrekt indrag

Här är några exempel som du kan hänvisa till, så att du kan säkerställa att du drar in korrekt.

Om uttalanden

Dra in blocket som följer efter en om påstående:

om mitt_namn == "Gaurav":
print("Jag heter Gaurav")
return True

Funktioner

En funktions kropp är ett block. Du bör dra in hela blocket:

def magic_number():
resultat = 42
returnera resultatet

print magic_number()

För loopar

Som med en if-sats, bör kroppen i en for-loop dras in en nivå mer än raden som börjar med för nyckelord:

för i inom intervallet (10):
skriva ut (i)

Se till att din redaktör drar in korrekt

De flesta moderna textredigerare stöder automatisk kodindragning. Om din redaktör bestämmer att en kodrad ska dras in, kommer den att lägga till tabbar eller mellanslag automatiskt.

I Spyder, indragsalternativ finns tillgängliga under Verktyg > Inställningar > Källkod:

Om du använder vim kan du redigera din konfiguration och använda autoindrag och relaterade alternativ för att konfigurera indrag. Till exempel, här är en vanlig inställning:

ställ in autoindrag
ställ in expandertab
ställ in tabstop=4
ställ in softtabstop=4
ställ in shiftwidth=4

Detta drar in automatiskt med fyra blanksteg.

Ingen redaktör kan dock göra automatisk indrag skottsäker. Du måste fortfarande vara uppmärksam på indrag eftersom vissa fall är tvetydiga:

I det här exemplet, finalen lämna tillbaka satsen dras in en nivå från funktionssignaturen på första raden. Men om du placerar markören i slutet av den näst sista raden och trycker Stiga på, en av två saker kan hända. Din redaktör kan placera markören:

  1. Två indragsnivåer i, i linje med "res =..."
  2. En indragsnivå in, i linje med "annat:"

Din redaktör kan inte skilja mellan dessa två fall: du kanske vill lägga till mer kod i if/else-blocket, eller så kanske du inte.

Hantera Pythons "Förväntade ett indraget block"-fel

Fel är en vardaglig företeelse i Python, precis som i alla andra programmeringsspråk. Pythons strikta regler om indrag kan lägga till en ny typ av fel att tänka på, men de är användbara. Korrekt indragen kod är mer läsbar och konsekvent mellan team.

Indragningsfelet är inte det enda du måste ta itu med. Det hjälper att vara bekant med vanliga Python-fel så att du vet hur du felsöker dem och vad du ska göra för att fixa dem.

Vad betyder Python-felet "Listindex utanför intervallet"?

Läs Nästa

Dela med sigTweetDela med sigE-post

Relaterade ämnen

  • Programmering
  • Pytonorm

Om författaren

Gaurav Siyal (64 publicerade artiklar)

Gaurav Siyal har två års erfarenhet av att skriva, skriva för en rad digitala marknadsföringsföretag och programvarulivscykeldokument.

Mer från Gaurav Siyal

Prenumerera på vårt nyhetsbrev

Gå med i vårt nyhetsbrev för tekniska tips, recensioner, gratis e-böcker och exklusiva erbjudanden!

Klicka här för att prenumerera