W tym artykule nauczysz się:
- czym różni się błąd od wyjątku,
- jak używać
try,except,elseifinally, - jak tworzyć własne wyjątki,
- i jak pisać kod, który potrafi sam się „obronić" w sytuacjach awaryjnych.
Czym jest wyjątek w Pythonie?
Wyjątek (Exception) to zdarzenie, które przerywa normalny przepływ programu, gdy coś pójdzie nie tak. Python natychmiast przerywa wykonywanie kodu i zgłasza wyjątek – np. gdy próbujesz dzielić przez zero lub odwołać się do nieistniejącego pliku.
Przykład:
Python1 2x = 10 / 0 print("To się nigdy nie wykona")
Wynik:
Bash1ZeroDivisionError: division by zero
Kod przestaje działać w miejscu błędu. Jeśli go nie obsłużysz, aplikacja się zakończy.
Obsługa wyjątków – blok try i except
Podstawowy sposób obsługi błędów to użycie konstrukcji:
Python1 2 3 4try: # kod, który może spowodować błąd except: # reakcja na błąd
Przykład:
Python1 2 3 4 5try: number = int(input("Podaj liczbę: ")) print(10 / number) except: print("Coś poszło nie tak")
Działa – ale jest zbyt ogólne. Nie wiesz, co dokładnie poszło nie tak. Lepiej obsługiwać konkretne wyjątki:
Python1 2 3 4 5 6 7try: number = int(input("Podaj liczbę: ")) print(10 / number) except ValueError: print("To nie jest liczba!") except ZeroDivisionError: print("Nie dziel przez zero!")
Bloki else i finally
Python daje Ci dwa dodatkowe narzędzia, które zwiększają kontrolę nad przepływem programu.
else
Blok else wykona się tylko wtedy, gdy w try nie wystąpi żaden wyjątek:
Python1 2 3 4 5 6try: result = 10 / 2 except ZeroDivisionError: print("Błąd dzielenia!") else: print("Wszystko działa poprawnie:", result)
finally
Blok finally wykona się zawsze – niezależnie od tego, czy wystąpił błąd, czy nie. Przydaje się do sprzątania po programie (zamykanie plików, połączeń z bazą itp.):
Python1 2 3 4 5 6 7 8try: file = open("data.txt") content = file.read() except FileNotFoundError: print("Nie znaleziono pliku") finally: file.close() print("Plik został zamknięty")
Hierarchia wyjątków w Pythonie
Każdy wyjątek w Pythonie jest klasą, która dziedziczy po BaseException lub Exception. Najczęściej spotykane wyjątki to:
ValueError– niepoprawna wartość,TypeError– niezgodny typ danych,IndexError– odwołanie poza zakres listy,KeyError– brak klucza w słowniku,FileNotFoundError– brak pliku,ZeroDivisionError– dzielenie przez zero.
Dzięki temu możesz przechwytywać konkretne klasy wyjątków, a nawet tworzyć własne.
Tworzenie własnych wyjątków
Jeśli tworzysz bibliotekę, API lub aplikację z własną logiką biznesową, warto definiować własne klasy wyjątków, aby kod był bardziej czytelny.
Python1 2 3 4 5 6 7 8 9 10 11 12class InvalidAgeError(Exception): pass def set_age(age): if age < 0: raise InvalidAgeError("Wiek nie może być ujemny") print("Wiek ustawiony:", age) try: set_age(-5) except InvalidAgeError as e: print("Błąd:", e)
Tworzenie własnych wyjątków to sposób na czytelne komunikowanie błędów domenowych – takich, które wynikają z logiki aplikacji, a nie błędów technicznych.
Obsługa wielu wyjątków w jednym bloku
Możesz obsłużyć kilka typów błędów w jednym except:
Python1 2 3 4try: result = 10 / int("x") except (ValueError, ZeroDivisionError) as e: print("Wystąpił błąd:", e)
Rzucanie wyjątków – raise
Nie tylko Python może generować wyjątki – Ty też możesz świadomie je rzucać:
Python1 2 3 4 5 6 7 8 9def divide(a, b): if b == 0: raise ZeroDivisionError("Dzielenie przez zero jest niedozwolone") return a / b try: print(divide(10, 0)) except ZeroDivisionError as e: print("Błąd:", e)
raise to potężne narzędzie, gdy chcesz wymusić kontrolowany błąd, zamiast pozwalać programowi działać w nieprawidłowym stanie.
Najczęstsze błędy przy obsłudze wyjątków
1. Używanie except: bez typu
To łapie wszystko, włącznie z błędami systemowymi. Używaj tego tylko przy debugowaniu lub logowaniu, nigdy w kodzie produkcyjnym.
2. Ignorowanie błędów
except: pass to najgorsze, co możesz zrobić – program działa „pozornie", ale ukrywasz przyczynę błędu.
3. Zbyt rozległe try-except
Nie otaczaj całego kodu jednym try. Lepiej lokalizować ryzykowne fragmenty, by wiedzieć, gdzie naprawdę wystąpił problem.
Dobre praktyki obsługi błędów
-
Przechwytuj tylko te błędy, które rozumiesz. Jeśli nie wiesz, jak go poprawić – nie łap go.
-
Loguj wyjątki. Używaj modułu
logging, aby zapisywać błędy zamiast je wyświetlać użytkownikowi. -
Nie ukrywaj błędów – kontroluj je. Lepiej, by program zakończył się z komunikatem, niż działał niepoprawnie.
-
Twórz własne wyjątki dla logiki biznesowej. Zwiększa to czytelność i utrzymanie kodu.
Podsumowanie
Obsługa wyjątków w Pythonie to nie kosmetyka – to fundament niezawodnego oprogramowania. Pozwala Ci reagować na nieprzewidziane sytuacje, zapobiegać awariom i utrzymywać kod w stanie przewidywalnym.
Zapamiętaj:
try/exceptto narzędzie kontroli przepływu, nie „łatka na błędy",- im bardziej precyzyjnie łapiesz wyjątki, tym bezpieczniejszy kod piszesz,
- dobrze zaprojektowany system błędów sprawia, że Twój kod nie tylko działa — on rozumie, co robi.



