Programmering 1

FELHANTERING
MÅL
- Förstå olika typer av fel och undantag (exceptions) som uppkommer i Python
- Använda try och except block för att hantera fel
SyntaxError
- När det anges fel syntax i Python. D.v.s när något inte är skrivit enligt reglerna i Python.
- Stavfel eller att inte känna till programspråkets regler
>>> fro i in range(10):
File "<stdin>", line 1
fro i in range(10):
^
SyntaxError: invalid syntax
NameError
- När man försöker använda en variabel som inte har blivit definierad.
>>> test
# NameError: name 'test' is not defined
TypeError
- När en funktion eller operation appliceras på fel datatyp
- När en operation inte kan appliceras på rätt angivna datatyper
len(5)
# TypeError: object of type 'int' has no len()
"test" + []
# TypeError: cannot concatenate 'str' and 'list' objects
IndexError
- När ett element med index utanför listan försöker nås.
list = ["hello"]
list[2]
# IndexError: list index out of range
ValueError
- När en funktion mottar ett argument som har rätt datatyp men inte passande värde.
int("foo")
# ValueError: invalid literal for int() with base 10: 'foo'
När man pratar om felhantering stöter man i termer som att kasta ett exception (throw exception) och fånga ett exception (catch exception).
När man kastar ett exception så talar man om att det har blivit ett fel och definierar vilket fel som ska uppbringas. Sedan fångar man felet och agerar därefter.
I Python kallas det raise exception. För att själv tvinga fram det använder man:
raise Exception
raise ValueError('Ett argument har inte rätt datatyp')
Exempel: raise Exception
def colorize(text, color):
colors = ("cyan", "yellow", "blue", "green", "magenta")
if type(text) is not str:
raise TypeError("text must be of type str")
if color not in colors:
raise ValueError("color is invalid color")
print(f"Printed {text} in {color}")
colorize([], 'cyan')
# colorize(34, "red")
try/except
try:
# Någon kod
except:
# Körs om ett undantag kastas från
# try-blocket
Try-blocket innehåller koden som eventuellt kastar ett undantag, medan exception-blocket fångar och hanterar undantaget.
ATT HANTERA FELEN SOM UPPKOMMER
Exempel try/except
try:
result = x / y
except ZeroDivisionError:
print('Divided by zero')
print('Här kör koden vidare')
Exempel try/except
try:
result = x / y
except ZeroDivisionError:
print("Make sure no divisions by 0 are made.")
except NameError:
print("Make sure both numbers are defined.")
print('Här kör koden vidare')
try/except med else
try:
result = x / y
except ZeroDivisionError:
print("Make sure no divisions by 0 are made.")
except NameError:
print("Make sure both numbers are defined.")
else:
print("There were no errors.")
print('Här kör koden vidare')
try/except med finally
try:
result = x / y
except ZeroDivisionError:
print("Make sure no divisions by 0 are made.")
except NameError:
print("Make sure both numbers are defined.")
else:
print("There were no errors.")
finally:
print("Process completed.")
print('Här kör koden vidare')
Sammanfattning try/except
try:
block att försöka
except:
block för undantagshantering
else:
block om allt gick bra
finally:
block som alltid utförs
Python dokumentation för exceptions
Programmering 1 - Felhantering
By Sandra Larsson
Programmering 1 - Felhantering
- 208