Wyjątki
Stronę tą wyświetlono już: 3439 razy
Kiedy coś pójdzie nie tak...
No właśnie, gdy coś pójdzie nie tak i w kodzie programu znajdzie się błąd chciałoby się, aby program wyświetlił naturę tego błędu. Obsługą błędów zajmują się wyjątki (exception), zanim jednak je omówię pokażę jak działają już wbudowane wyjątki:
Powyższy błąd wywoła obsługę wyjątku związanego z dzieleniem przez zero, oto co wyświetli się w konsoli po wykonaniu tego działania:
------------------------------------------------------------------- ZeroDivisionError Traceback (most recent call last)in () ----> 1 x = 1/0 ZeroDivisionError: division by zero
W konsoli ładnie i przejrzyście wyświetlone zostały informacje co poszło nie tak i gdzie poszło nie tak. W tym przypadku wywołany został wyjątek ZeroDivisionError, czyli dzielenie przez zero.
Kolejny przykład działania wbudowanych wyjątków:
Powyższy kod wywoła następujący wyjątek:
In [5]: x = 5 * (1 - y)) File "", line 1 x = 5 * (1 - y)) ^ SyntaxError: invalid syntax
Tym razem wyjątek to SyntaxError (błąd składni).
Jak widać wyjątki są dość ważne, ponieważ wskazują jaki błąd został popełniony, i gdzie został popełniony co ułatwia eliminację błędu.
Przechwytywanie wyjątków
Wyjątki są przechwytywane za pomocą try, except w następujący przykładowy sposób:
Przykład działania tego kodu:
Podaj jakąś liczbę: s To raczej liczba nie jest. Spróbuj ponownie! Podaj jakąś liczbę: 10
Oczywiście możliwe jest obsłużenie kilku różnych wyjątków, np w następujący sposób:
W powyższym kodzie wykorzystana została funkcja eval, która jako argument przyjmuje tekst. Tekst ten jest interpretowany jak kod Pythona. Żeby być szczególnie dokładnym chodzi o jednoliniowy kod. Wewnątrz tekstu może znajdować się wszystko co prowadzi do konkluzji, że użytkownik może wpisać jakąś głupotę. Warto więc obsłużyć w odpowiedni sposób wyjątki, co też i powyższy kod czyni.
Oto przykład działania powyższego kodu:
Podaj wyrażenie do obliczenia: 2 * 3 / 0 Dzielisz przez zero (division by zero)
Szczegółowa lista wyjątków, jakie można przechwycić została opisana na stronie docs.python.org. Poniżej zamieszczam listę tychże wyjątków:
- BaseException;
- Exception;
- StandardException;
- ArithmeticalError - kombinacja wyjątków OverflowError, ZeroDivisionError i FloatingPointError;
- BufferError;
- LookupError;
- EnviromentError;
- AssertionError;
- AtteributeError;
- EOFError;
- FloatingPointError;
- GeneratorExit;
- IOError;
- ImportError;
- IndexError;
- KeyError;
- KeyboardInterrupt;
- MemoryError;
- NameError;
- NotImplementedError;
- OSError;
- OverflowError;
- ReferenceError;
- RuntimeError;
- StopIteration;
- SyntaxError;
- IndentationError;
- TabError;
- SystemError;
- SystemExit;
- TypeError;
- UnboundLocalError;
- UnicodeError;
- UnicodeEncodeError;
- UnicodeDecodeError;
- UnicodeTranslateError;
- ValueError;
- VMSError;
- WindowsError;
- ZeroDivisionError;
- Warning;
- UserWarning;
- DepracationWarning;
- SystaxWarning;
- RuntimeWarning;
- FutureWarning;
- ImportWarning;
- UnicodeWarning
Tworzenie własnych wyjątków:
Istnieje też możliwość tworzenia swoich własnych wyjątków, choć zalecane jest wykorzystywanie wyjątków wymienionych na powyższej liście. Oto przykład kodu wykorzystującego własnoręcznie utworzony wyjątek:
W powyższym przykładzie klasa NegativeValue jest klasą obsługi własnego błędu. Taka klasa musi dziedziczyć po klasie Exception. Nasz wyjątek zostanie wywołany wewnątrz funkcji Silnia za pomocą słowa kluczowego raise jako odpowiedź na podanie jako argumentu tej funkcji liczby ujemnej.
Tytuł:
Python w analizie danych. Przetwarzanie danych za pomocą pakietów pandas i NumPy oraz środowiska Jupyter. Wydanie III
Autor:
Wes McKinney
Tytuł:
Machine learning, Python i data science. Wprowadzenie
Autor:
Andreas Müller, Sarah Guido
Tytuł:
Python zorientowany obiektowo. Programowanie gier i graficznych interfejsów użytkownika
Autor:
Irv Kalb
Tytuł:
Python na start! Programowanie dla nastolatków
Autor:
Michał Wiszniewski
Tytuł:
Sztuczna inteligencja w finansach. Używaj języka Python do projektowania i wdrażania algorytmów AI
Autor:
Yves Hilpisch
Tytuł:
Python w zadaniach. Programowanie dla młodzieży. Poziom podstawowy
Autor:
Urszula Wiejak, Adrian Wojciechowski
Tytuł:
Python i praca z danymi. Przetwarzanie, analiza, modelowanie i wizualizacja. Wydanie III
Autor:
Avinash Navlani, Armando Fandango, Ivan Idris
Tytuł:
Black Hat Python. Język Python dla hakerów i pentesterów. Wydanie II
Autor:
Justin Seitz, Tim Arnold
Tytuł:
Python z życia wzięty. Rozwiązywanie problemów za pomocą kilku linii kodu
Autor:
Lee Vaughan
Tytuł:
Python i AI dla e-commerce
Autor:
Sebastian Kondracki