Co to są wyjątki w Pythonie?
Wyjątki w Pythonie to mechanizmy, które pozwalają na obsługę błędów i nieoczekiwanych sytuacji w kodzie. Są one integralną częścią języka i umożliwiają programistom zarządzanie błędami w sposób kontrolowany, zamiast pozwalać na awarię programu. Wyjątki są podklasami klasy bazowej BaseException
, a najczęściej używaną klasą jest Exception
.
Rodzaje wyjątków
W Pythonie istnieje wiele wbudowanych wyjątków, które można podzielić na kilka kategorii:
- SyntaxError: Błąd składniowy, który występuje, gdy kod nie jest poprawnie napisany.
- TypeError: Błąd typu, który występuje, gdy operacja jest wykonywana na nieodpowiednim typie danych.
- ValueError: Błąd wartości, który występuje, gdy funkcja otrzymuje argument o nieodpowiedniej wartości.
- IndexError: Błąd indeksu, który występuje, gdy próbujemy uzyskać dostęp do elementu listy za pomocą nieprawidłowego indeksu.
- KeyError: Błąd klucza, który występuje, gdy próbujemy uzyskać dostęp do nieistniejącego klucza w słowniku.
Jak obsługiwać wyjątki w Pythonie?
Obsługa wyjątków w Pythonie odbywa się za pomocą konstrukcji try
i except
. Poniżej znajduje się podstawowy przykład:
try:
# Kod, który może wywołać wyjątek
wynik = 10 / 0
except ZeroDivisionError:
# Kod obsługujący wyjątek
print("Nie można dzielić przez zero!")
W powyższym przykładzie, jeśli wystąpi błąd dzielenia przez zero, zostanie on przechwycony przez blok except
, a program nie zakończy się awarią.
Blok finally
Blok finally
jest używany do wykonania kodu, który powinien zostać uruchomiony niezależnie od tego, czy wyjątek wystąpił, czy nie. Jest to przydatne do zwalniania zasobów, takich jak pliki czy połączenia sieciowe.
try:
plik = open("dane.txt", "r")
# Operacje na pliku
except FileNotFoundError:
print("Plik nie został znaleziony.")
finally:
plik.close()
Podnoszenie wyjątków
W Pythonie można również ręcznie podnieść wyjątek za pomocą słowa kluczowego raise
. Jest to przydatne, gdy chcemy zgłosić błąd w określonych warunkach.
def sprawdz_wiek(wiek):
if wiek < 0:
raise ValueError("Wiek nie może być ujemny!")
return True
try:
sprawdz_wiek(-1)
except ValueError as e:
print(e)
Przykład praktyczny
Rozważmy bardziej złożony przykład, w którym obsługujemy różne typy wyjątków:
def oblicz(a, b):
try:
wynik = a / b
print(f"Wynik: {wynik}")
except ZeroDivisionError:
print("Błąd: Dzielenie przez zero!")
except TypeError:
print("Błąd: Nieprawidłowy typ danych!")
except Exception as e:
print(f"Nieoczekiwany błąd: {e}")
finally:
print("Operacja zakończona.")
# Testowanie funkcji
oblicz(10, 2)
oblicz(10, 0)
oblicz(10, "a")
Podsumowanie
Wyjątki w Pythonie są potężnym narzędziem do zarządzania błędami i nieoczekiwanymi sytuacjami w kodzie. Dzięki konstrukcjom try
, except
, finally
oraz raise
, programiści mogą tworzyć bardziej niezawodne i odporne na błędy aplikacje. Pamiętaj, aby zawsze dokładnie obsługiwać wyjątki i zapewniać odpowiednie komunikaty błędów, co znacznie ułatwi debugowanie i utrzymanie kodu.