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 ValueError och FileNotFoundError.
  • 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.

Välj ett exempel och tryck på Kör exempel.

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.

  1. Fråga användaren efter ålder med input().
  2. Försök göra om svaret till ett heltal med int().
  3. Fånga ValueError om användaren skriver text i stället för ett tal.
  4. Kontrollera om talet är negativt. Skriv då ut ett tydligt felmeddelande.
  5. Om åldern är giltig, skriv ut ungefär vilket år personen föddes.
  6. 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/except fö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.

Tillbaka till Kapitel 4