Felsökning och felhantering i Python
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å:
| Feltyp | Förklaring | Exempel |
|---|---|---|
| Syntaxfel | När något är fel skrivet enligt språket. | Saknar kolon (:) i en if-sats eller felaktig indragning. |
| Exekveringsfel | Fel 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 fel | Programmet 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 nollValueError: 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:
| Teknik | Förklaring |
|---|---|
print()-debugging | Lägg in print() för att se vad som händer, steg för steg. |
| Kommentarblock | Kommentera bort kod för att isolera problemet. |
| Bygg små delar | Skriv kod i små steg och testa ofta. |
| Använd IDE-stöd | Vissa editorer (t.ex. Thonny) har ”steppa genom”-funktion för debugging. |
| Läs felmeddelandet | Lä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/exceptför att förhindra krascher och ge användaren bra återkoppling. - Använd felsökningstekniker som
print()och små tester.