Programmering nivå 2
Kap 4.2 – Try/except och felsökning
Hantera fel och hitta buggar i din kod.
Mål med lektionen
När du har arbetat klart med denna lektion ska du:
- Förstå varför fel uppstår i program.
- Känna till vanliga undantag i Python.
- Använda try/except för att fånga fel och fortsätta programflödet.
- Skriva tydligare och mer felsäker kod.
Så här lär du dig bäst
För att förstå try/except måste du testa vad som händer när något går fel. Skriv kod
som kraschar och se hur Python rapporterar felet. Använd sedan try/except för att
hantera det. Arbeta med små exempel och koppla dem till tidigare uppgifter, till exempel fel vid
filhantering eller felaktig inmatning från användaren.
Repetition och fördjupning
Du har redan mött try och except i kapitel 1.6. Där låg fokus på grunden:
att fånga ValueError när användaren skriver fel typ av inmatning.
I detta kapitel repeterar vi grunden, men går vidare med fler vanliga feltyper och felsökning. Du får se hur samma idé används vid filhantering, division med noll och när du läser en traceback för att hitta var felet uppstod.
Centrala begrepp
- undantag (exceptions) - Fel som uppstår när program körs, till exempel
ValueErrorochFileNotFoundError. - try/except - Konstruktion som fångar fel utan att programmet kraschar.
- felmeddelanden - Hjälper dig förstå vad som gick fel och var.
Innehåll och exempel
Exempel: konverteringsfel
try:
tal = int(input("Skriv ett heltal: "))
print(f"Du skrev: {tal}")
except ValueError:
print("Fel: Du måste skriva ett heltal!")
ValueError kan uppstå när programmet försöker göra om en text till ett tal, men texten
inte har rätt format.
Exempel: fil saknas
try:
with open("saknas.txt", "r") as f:
innehåll = f.read()
except FileNotFoundError:
print("Filen hittades inte.")
Det här exemplet visar hur du fångar ett vanligt filfel när en fil inte finns. Då skriver programmet ut ett tydligt meddelande i stället för att krascha.
Exempel: generellt fel
try:
tal = int(input("Skriv ett tal att dividera 10 med: "))
resultat = 10 / tal
print(f"Resultatet blir {resultat}")
except ZeroDivisionError:
print("Du kan inte dividera med noll!")
Om användaren skriver till exempel 2 fungerar programmet och skriver ut resultatet
5.0. Om användaren skriver 0 fångas felet av except och
programmet visar ett tydligt felmeddelande i stället för att krascha.
Interaktiv övning: fånga olika fel
Välj exempel och kör koden. Övningen visar vilken rad som orsakar felet och vilket
except-block som fångar det.
Programmering 2-koppling: olika fel kräver olika
undantagstyper. FileNotFoundError passar när en fil saknas.
ZeroDivisionError passar när programmet försöker dividera med noll.
Felsökning
När ett fel uppstår visar Python ett spår, en traceback, som berättar vilken typ av fel som inträffade, var i koden felet uppstod och vilken kodrad som orsakade felet.
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Det betyder att programmet försökte addera ett heltal och en text, vilket inte går.
Tips för bättre felsökning
- Lägg till tydliga felmeddelanden i
except. - Använd
print()för att spåra vad som händer före felet. - Testa delar av programmet i taget.
- Kommentera kodstycken om du inte vet var felet ligger.
Öva själv
Skapa filen kap4-2-alder.py i din kursmapp. Programmet ska fråga efter användarens
ålder och hantera vanliga fel med try/except.
- Fråga användaren efter ålder med
input(). - Försök göra om svaret till ett heltal med
int(). - Fånga
ValueErrorom användaren skriver text i stället för ett tal. - Kontrollera om talet är negativt. Skriv då ut ett tydligt felmeddelande.
- Om åldern är giltig, skriv ut ungefär vilket år personen föddes.
- Testa programmet med ett giltigt tal, text och ett negativt tal.
När du har försökt själv kan du ladda ner ett lösningsförslag: kap4-2-alder-losningsforslag.py
Sammanfattning
- Fel är en naturlig del av programmering - det viktiga är hur du hanterar dem.
- Du kan använda
try/exceptför att fånga fel och visa vänliga meddelanden. - Felsökning handlar om att förstå vad som händer i programmet och varför.