När du programmerar kommer det alltid att uppstå fel. Det kan vara att du råkat stava fel, att användaren skrev in något du inte väntade dig – eller att programmet försöker göra något som inte är möjligt. I detta avsnitt kommer du att få lära dig hur man hittar, förstår och hanterar fel i sin kod.

Olika typer av fel

Python visar ofta felmeddelanden när något går snett. Här är några vanliga typer av fel du kan stöta på:

FeltypFörklaringExempel
SyntaxfelNär något är fel skrivet enligt språket.Saknar kolon (:) i en if-sats eller felaktig indragning.
ExekveringsfelFel som uppstår när programmet körs, t.ex. om användaren skriver fel.Dela med 0, läsa från en tom lista, eller ogiltig input.
Logiska felProgrammet körs utan krascher men gör inte vad det ska.Räknar fel, hoppar över kod, fel i if-villkor.

Exempel på ett exekveringsfel:

tal = int(input("Skriv ett heltal: "))
print(10 / tal)

Om användaren skriver 0 kommer programmet krascha med felet:
ZeroDivisionError: division by zero

Hantera fel med try och except

För att undvika att programmet kraschar kan du använda felhantering med try och except. Då testar Python koden i try-blocket, och om det uppstår ett fel hoppar den till except-blocket.

Exempel:

try:
    tal = int(input("Skriv ett heltal: "))
    print(10 / tal)
except ZeroDivisionError:
    print("Du kan inte dela med noll!")
except ValueError:
    print("Du måste skriva ett heltal.")

Här hanteras två möjliga fel:

  • ZeroDivisionError: om man försöker dela med noll
  • ValueError: om man skriver in t.ex. text istället för ett tal

Generell felhantering

Ibland vill man fånga alla sorters fel och skriva ett generellt felmeddelande. Det gör man så här:

try:
    # kod som kan orsaka fel
except Exception as fel:
    print("Ett fel uppstod:", fel)

Detta kan vara praktiskt i början, men det är bättre att specificera felen man förväntar sig.

Kombinera while och try/except

Ibland vill man upprepa en fråga tills användaren skriver något giltigt. Då kan man kombinera try/except med en while-loop.

Exempel:

while True:
    try:
        tal = int(input("Ange ett heltal: "))
        break  # Hoppar ur loopen om det lyckas
    except ValueError:
        print("Du måste skriva ett heltal!")

Bra användning av try/except

När ska man använda try/except?

  • När man förväntar sig att något kan gå fel – t.ex. användarinmatning.
  • När man vill att programmet ska fortsätta även om ett fel inträffar.
  • När man vill ge användaren ett tydligt felmeddelande.

När ska man inte använda det?

  • Inte för att ”gömma” fel du inte förstår.
  • Inte för att slippa lösa problemet på rätt sätt.

Tips för felsökning

Att felsöka är en viktig del av programmering. Här är några strategier:

TeknikFörklaring
print()-debuggingLägg in print() för att se vad som händer, steg för steg.
KommentarblockKommentera bort kod för att isolera problemet.
Bygg små delarSkriv kod i små steg och testa ofta.
Använd IDE-stödVissa editorer (t.ex. Thonny) har ”steppa genom”-funktion för debugging.
Läs felmeddelandetLäs vad Python faktiskt säger – ofta står raden och felet tydligt.

Sammanfattning

  • Fel är naturliga och en del av programmering.
  • Lär dig att läsa felmeddelanden och förstå olika feltyper.
  • Använd try/except för att förhindra krascher och ge användaren bra återkoppling.
  • Använd felsökningstekniker som print() och små tester.