2.1 Tworzenie wyjątków
Jeśli nie możesz pokonać - przewodź. Skoro nie możemy uniknąć pojawienia się błędów w programie, musimy nauczyć się je kontrolować. A zatem nauczmy się świadomie tworzyć wyjątki.
Najprostszy przykład wyjątku — to dzielenie przez zero. No i program też jest prosty:
x = 100 / 0
Taki kod zakończy się błędem:
Traceback (most recent call last):
File "", line 1, in
x = 100 / 0
~~~^~
ZeroDivisionError: division by zero
ZeroDivisionError
— to nazwa wyjątku, a division by zero
— jego krótkie wyjaśnienie. Python również poda numer linii, gdzie wyjątek wystąpił.
Niezgodność typów danych
Oczywiście, możliwe są inne wyjątki. Na przykład, przy próbie dodania stringu i liczby:
s = "100" + 100
Wystąpi wyjątek TypeError
:
Traceback (most recent call last):
File "", line 1, in
TypeError: unsupported operand type(s) for +: 'str' and 'int'
Wyjście poza zakres listy
Kolejny bardzo powszechny błąd generujący wyjątek — to próba odwołania się do elementu, który nie istnieje w liście:
my_list = [1, 2, 3]
print(my_list[10])
Wystąpi wyjątek IndexError
:
Traceback (most recent call last):
print(my_list[10])
~~~~~~~^^^^
IndexError: list index out of range
Ile ich jest? Jest tysiące różnych typów wyjątków. Co więcej, możesz stworzyć swoje własne, jeśli te istniejące nie wystarczają do opisania jakiejś szczególnej sytuacji. Chociaż najbardziej popularnych nie jest zbyt wiele.
2.2 Lista najpopularniejszych wyjątków
Wyjątków jest wiele, ale jako nowicjuszowi przyda ci się wiedza o tych najbardziej popularnych. Poniżej znajdziesz tabelę z nimi:
Wyjątek | Opis |
---|---|
Exception |
Podstawowa klasa dla wszystkich wyjątków. |
IndexError |
Występuje przy odwołaniu do nieistniejącego indeksu w sekwencji (np. lista lub krotka). |
KeyError |
Występuje przy odwołaniu do nieistniejącego klucza w słowniku. |
NameError |
Występuje przy odwołaniu do nieistniejącej zmiennej. |
RuntimeError |
Występuje przy ogólnym błędzie czasu wykonania, który nie należy do innych typów wyjątków. |
StopIteration |
Występuje dla sygnalizacji zakończenia iteracji. |
SyntaxError |
Występuje przy błędzie składni w kodzie. |
IndentationError |
Występuje przy błędzie wcięć w kodzie (podtyp SyntaxError ). |
TabError |
Występuje przy mieszaniu tabulacji i spacji dla wcięć (podtyp IndentationError ). |
TypeError |
Występuje przy próbie wykonania operacji z niekompatybilnymi typami danych. |
UnboundLocalError |
Występuje przy odwołaniu do lokalnej zmiennej przed jej deklaracją (podtyp NameError ). |
ValueError |
Występuje przy przekazaniu funkcji lub operacji argumentu z nieprawidłową wartością. |
ZeroDivisionError |
Występuje przy dzieleniu przez zero. |
Najprawdopodobniej jako początkujący w pierwszym miesiącu nauki zetkniesz się ze wszystkimi tymi błędami. I nie ma w tym nic złego - na błędach się uczymy.
2.3 Błędy w kodzie
Przyjrzyjmy się jeszcze kilku sytuacjom, gdy w kodzie występują błędy, aby łatwiej było je potem znajdować w swoim kodzie:
IndentationError
Ten typ błędu występuje, gdy wcięcia w kodzie są nieprawidłowe. Na przykład, mieszanie tabulacji i spacji lub nieprawidłowa liczba wcięć.
def example():
print("Hello")
print("World") # Nieprawidłowe wcięcie powoduje IndentationError
example()
NameError
def example():
print(undeclared_variable) # Próba użycia niezadeklarowanej zmiennej powoduje NameError
example()
ValueError
Ten typ błędu występuje, gdy operacja lub funkcja otrzymuje argument prawidłowego typu, ale o nieodpowiedniej wartości.
def example():
int("abc") # Próba przekształcenia stringu, który nie jest liczbą, powoduje ValueError
example()
KeyError
Ten typ błędu występuje, gdy program próbuje uzyskać dostęp do nieistniejącego klucza w słowniku.
def example():
my_dict = {"a": 1, "b": 2}
print(my_dict["c"]) # Próba dostępu do nieistniejącego klucza powoduje KeyError
example()
SyntaxError
Ten typ błędu występuje, gdy w kodzie jest błąd składniowy, czyli kod nie jest zgodny z gramatyką języka Python.
def example():
eval("if True print('Hello')") # Nieprawidłowa składnia powoduje SyntaxError
example()
Kto jest uprzedzony, ten uzbrojony. Teraz możesz rozpoznawać i tworzyć sytuacje, które powodują błędy. Nadszedł czas, aby nauczyć się obsługiwać te błędy.
GO TO FULL VERSION