Undantagshantering i Python
Vad är ett undantag (exception)?
Ett undantag är ett fel som uppstår när programmet körs, till exempel:
- Användaren matar in text istället för ett tal
- En fil saknas
- En lista är tom och du försöker hämta ett element
När ett undantag sker kraschar programmet – om vi inte hanterar det.
try och except – grunden
try:
tal = int(input("Skriv ett heltal: "))
except ValueError:
print("Fel! Du måste skriva ett heltal.")try: här skriver vi kod som kan orsaka felexcept: körs om ett visst fel uppstår
Vanliga feltyper (undantag)
| Feltyp | När det sker |
|---|---|
ValueError | Om int("abc") misslyckas |
ZeroDivisionError | När man delar med 0 |
FileNotFoundError | När en fil inte kan hittas |
IndexError | När man går utanför listans index |
TypeError | Felaktig typ, t.ex. "hej" + 5 |
Du kan skriva flera except-block:
try:
x = int(input("Tal: "))
y = 10 / x
except ValueError:
print("Du måste skriva ett heltal.")
except ZeroDivisionError:
print("Du kan inte dela med 0.")else och finally
else: körs endast om inget fel uppstårfinally: körs alltid, oavsett fel eller inte
try:
tal = int(input("Skriv ett heltal: "))
except ValueError:
print("Fel!")
else:
print("Du skrev:", tal)
finally:
print("Programmet avslutas.")raise – skapa egna fel
Du kan också själv kasta ett undantag med raise:
age = int(input("Hur gammal är du? "))
if age < 0:
raise ValueError("Ålder kan inte vara negativ!")Detta är användbart när du vill validera data eller stoppa något medvetet.
Sammanfattning
| Del | Funktion |
|---|---|
try: | Kod som kan ge fel |
except: | Hanterar felet och ger eget meddelande |
else: | Körs om ingen exception uppstår |
finally: | Körs alltid, t.ex. för att stänga en fil |
raise | Skickar ett felmeddelande manuellt |