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 fel
  • except: körs om ett visst fel uppstår

Vanliga feltyper (undantag)

FeltypNär det sker
ValueErrorOm int("abc") misslyckas
ZeroDivisionErrorNär man delar med 0
FileNotFoundErrorNär en fil inte kan hittas
IndexErrorNär man går utanför listans index
TypeErrorFelaktig 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år
  • finally: 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

DelFunktion
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
raiseSkickar ett felmeddelande manuellt