Programmering nivå 1 med Python

Kapitel 10: Undantagshantering

I detta kapitel lär du dig att fånga fel med try och except samt att skriva robusta program som inte kraschar vid oväntad inmatning.

Innehållsförteckning

Klicka på ett avsnitt för att hoppa direkt.

10.1 Vad är undantag

I tidigare kapitel har du sett att program kan krascha när något går fel. Till exempel om användaren skriver fel typ av data eller om man delar med noll.

Ett undantag är ett fel som uppstår när programmet körs.

Istället för att programmet kraschar kan vi i Python fånga felet och hantera det. Detta kallas undantagshantering.

Varför använda undantag

Undantag gör att program kan

  • fortsätta köra trots fel
  • ge tydliga felmeddelanden till användaren
  • hantera oväntad inmatning

Det gör program mer stabila och användarvänliga.

Exempel utan undantag

age = int(input("Hur gammal är du? "))
print(age + 5)

Om användaren skriver

hej

kraschar programmet.

Exempel med undantag

try:
    age = int(input("Hur gammal är du? "))
    print(age + 5)
except:
    print("Du måste skriva ett tal")

Nu kraschar inte programmet. Istället får användaren ett meddelande.

Hur det fungerar

  • try används för kod som kan orsaka fel
  • except körs om ett fel uppstår

Programmet försöker först köra koden i try. Om något går fel hoppar Python till except.

Övning

Skriv ett program som

  • frågar användaren efter ett tal
  • försöker omvandla det till ett heltal
  • skriver ut talet plus 10

Om användaren skriver något som inte är ett tal ska programmet skriva ut

Fel inmatning

10.2 Hantera felaktig input

När ett program tar emot indata från användaren finns det alltid en risk att användaren skriver något oväntat.

Det kan till exempel vara

  • text istället för tal
  • tom inmatning
  • fel format

Därför är det viktigt att kunna hantera felaktig input.

Problem utan felhantering

age = int(input("Hur gammal är du? "))
print(age + 5)

Om användaren skriver

hej

kraschar programmet eftersom text inte kan omvandlas till ett tal.

Lösning med try except

try:
    age = int(input("Hur gammal är du? "))
    print(age + 5)
except:
    print("Fel inmatning")

Programmet kraschar inte längre. Istället får användaren ett tydligt meddelande.

Be användaren försöka igen

Ibland vill man att användaren ska få flera försök. Det kan man göra med en loop.

while True:
    try:
        age = int(input("Hur gammal är du? "))
        print(age + 5)
        break
    except:
        print("Fel inmatning, försök igen")

Programmet fortsätter tills användaren skriver ett korrekt värde.

Varför detta är viktigt

Att hantera felaktig input gör program

  • mer robusta
  • mer användarvänliga
  • mer pålitliga

Övning

Skriv ett program som

  • frågar användaren efter ett tal
  • fortsätter fråga tills användaren skriver ett giltigt heltal
  • skriver ut talet multiplicerat med 2

10.3 Robusta program

Ett robust program är ett program som klarar av oväntade situationer utan att krascha.

Det betyder att programmet kan hantera

  • felaktig input
  • ovanliga värden
  • oväntade situationer

Robusta program är viktiga eftersom användare inte alltid gör som programmeraren tänkt.

Exempel på icke robust program

number = int(input("Skriv ett tal: "))
print(100 / number)

Problem

  • om användaren skriver text kraschar programmet
  • om användaren skriver 0 kraschar programmet

Exempel på robust program

while True:
    try:
        number = int(input("Skriv ett tal: "))
        if number == 0:
            print("Du kan inte dela med 0")
        else:
            print(100 / number)
            break
    except:
        print("Fel inmatning, försök igen")

Programmet

  • hanterar felaktig input
  • hanterar division med noll
  • låter användaren försöka igen

Vad gör ett program robust

Ett robust program

  • kontrollerar användarens inmatning
  • hanterar fel med try except
  • ger tydliga meddelanden
  • låter användaren försöka igen

Varför detta är viktigt

Robusta program är

  • mer stabila
  • lättare att använda
  • mer professionella

Övning

Skriv ett program som

  • frågar användaren efter två tal
  • fortsätter fråga tills båda talen är giltiga heltal
  • skriver ut resultatet av divisionen

Programmet ska

  • inte krascha
  • hantera division med noll
  • ge tydliga felmeddelanden

10.4 Övningar

I dessa övningar ska du träna på

  • try except
  • hantera felaktig input
  • skapa robusta program

Övning 1

Skriv ett program som

  • frågar användaren efter ett tal
  • försöker omvandla det till ett heltal
  • skriver ut talet multiplicerat med 3

Om användaren skriver fel ska programmet skriva

Fel inmatning

Övning 2

Skriv ett program som

  • frågar användaren efter ett tal
  • fortsätter fråga tills användaren skriver ett giltigt heltal
  • skriver ut talet plus 10

Övning 3

Skriv ett program som

  • frågar användaren efter två tal
  • försöker omvandla dem till heltal
  • skriver ut summan

Om något blir fel ska programmet skriva

Fel inmatning

Övning 4

Skriv ett program som

  • frågar användaren efter två tal
  • fortsätter fråga tills båda talen är giltiga
  • skriver ut produkten

Övning 5

Skriv ett program som

  • frågar användaren efter ett tal
  • kontrollerar att talet inte är 0
  • skriver ut 100 delat med talet

Programmet ska

  • hantera felaktig input
  • hantera division med noll
  • inte krascha

Övning 6

Skriv ett program som

  • frågar användaren efter ett tal
  • fortsätter fråga tills användaren skriver ett giltigt tal större än 0
  • skriver ut talet multiplicerat med 5

Programmet ska ge tydliga felmeddelanden om något blir fel.

10.5 Reflektionsfrågor

  1. Vad är ett undantag i Python?
  2. Vad är syftet med try och except?
  3. Vad händer om ett fel uppstår i ett try-block?
  4. Varför är det viktigt att hantera felaktig input?
  5. Vad innebär det att ett program är robust?
  6. Hur kan man göra ett program mer användarvänligt med hjälp av undantag?
  7. Varför är det bättre att få ett felmeddelande än att programmet kraschar?
  8. Hur fungerar en loop tillsammans med try except?
  9. Vad kan hända om man inte hanterar division med noll i ett program?
  10. Hur kan du förbättra ett program så att det klarar oväntade situationer?