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
tryanvänds för kod som kan orsaka felexceptkö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
- Vad är ett undantag i Python?
- Vad är syftet med
tryochexcept? - Vad händer om ett fel uppstår i ett
try-block? - Varför är det viktigt att hantera felaktig input?
- Vad innebär det att ett program är robust?
- Hur kan man göra ett program mer användarvänligt med hjälp av undantag?
- Varför är det bättre att få ett felmeddelande än att programmet kraschar?
- Hur fungerar en loop tillsammans med
try except? - Vad kan hända om man inte hanterar division med noll i ett program?
- Hur kan du förbättra ett program så att det klarar oväntade situationer?