W tym samouczku dowiesz się o różnych typach błędów i wyjątków wbudowanych w Python. Są one wywoływane za każdym razem, gdy interpreter języka Python napotka błędy.
Wideo: Obsługa wyjątków w języku Python
Podczas pisania programu możemy popełnić pewne błędy, które prowadzą do błędów przy próbie jego uruchomienia. Program w Pythonie kończy działanie, gdy tylko napotka nieobsługiwany błąd. Błędy te można ogólnie podzielić na dwie klasy:
- Błędy składniowe
- Błędy logiczne (wyjątki)
Błędy składni Pythona
Błąd spowodowany nieprzestrzeganiem właściwej struktury (składni) języka nazywany jest błędem składniowym lub błędem analizy .
Spójrzmy na jeden przykład:
>>> if a < 3 File "", line 1 if a < 3 SyntaxError: invalid syntax
Jak pokazano w przykładzie, strzałka wskazuje, gdzie parser napotkał błąd składni.
Możemy tu zauważyć, że :
w if
stwierdzeniu brakuje dwukropka .
Błędy logiczne w Pythonie (wyjątki)
Błędy występujące w czasie wykonywania (po przejściu testu składni) nazywane są wyjątkami lub błędami logicznymi .
Na przykład pojawiają się, gdy próbujemy otworzyć plik (do odczytu), który nie istnieje ( FileNotFoundError
), próbujemy podzielić liczbę przez zero ( ZeroDivisionError
) lub próbujemy zaimportować moduł, który nie istnieje ( ImportError
).
Zawsze, gdy wystąpią tego typu błędy w czasie wykonywania, Python tworzy obiekt wyjątku. Jeśli nie zostanie prawidłowo obsłużony, drukuje ślad zwrotny do tego błędu wraz z niektórymi szczegółami dotyczącymi przyczyny wystąpienia tego błędu.
Spójrzmy, jak Python traktuje te błędy:
>>> 1 / 0 Traceback (most recent call last): File "", line 301, in runcode File "", line 1, in ZeroDivisionError: division by zero >>> open("imaginary.txt") Traceback (most recent call last): File "", line 301, in runcode File "", line 1, in FileNotFoundError: (Errno 2) No such file or directory: 'imaginary.txt'
Wyjątki wbudowane w Pythonie
Nielegalne operacje mogą powodować wyjątki. W Pythonie jest wiele wbudowanych wyjątków, które są zgłaszane, gdy wystąpią odpowiednie błędy. Możemy wyświetlić wszystkie wbudowane wyjątki za pomocą funkcji wbudowanej w local()
następujący sposób:
print(dir(locals()('__builtins__')))
locals()('__builtins__')
zwróci moduł wbudowanych wyjątków, funkcji i atrybutów. dir
pozwala nam wyświetlić te atrybuty jako ciągi.
Poniżej wymieniono niektóre typowe wbudowane wyjątki w programowaniu w Pythonie wraz z błędami, które je powodują:
Wyjątek | Przyczyna błędu |
---|---|
AssertionError | Podnoszone, gdy assert instrukcja nie powiedzie się. |
AttributeError | Wywoływane, gdy przypisanie atrybutu lub odwołanie nie powiedzie się. |
EOFError | Podnoszone, gdy input() funkcja osiągnie warunek końca pliku. |
FloatingPointError | Podnoszone, gdy operacja zmiennoprzecinkowa nie powiedzie się. |
GeneratorExit | Podnieś, gdy close() zostanie wywołana metoda generatora . |
ImportError | Podnoszone, gdy zaimportowany moduł nie zostanie znaleziony. |
IndexError | Podnoszony, gdy indeks sekwencji jest poza zakresem. |
KeyError | Wywoływane, gdy klucz nie zostanie znaleziony w słowniku. |
KeyboardInterrupt | Podnoszone, gdy użytkownik naciśnie klawisz przerwania ( Ctrl+C lub Delete ). |
MemoryError | Podnoszone, gdy w operacji zabraknie pamięci. |
NameError | Wywoływane, gdy zmienna nie zostanie znaleziona w zakresie lokalnym lub globalnym. |
NotImplementedError | Podniesione abstrakcyjnymi metodami. |
OSError | Podnoszone, gdy działanie systemu powoduje błąd związany z systemem. |
OverflowError | Podnoszony, gdy wynik operacji arytmetycznej jest zbyt duży, aby można go było przedstawić. |
ReferenceError | Wywoływane, gdy słaby odwołanie proxy jest używane w celu uzyskania dostępu do elementu referencyjnego zebranego bezużyteczności. |
RuntimeError | Podnoszone, gdy błąd nie należy do żadnej innej kategorii. |
StopIteration | Podniesiony przez next() funkcję, aby wskazać, że nie ma kolejnego elementu do zwrócenia przez iterator. |
SyntaxError | Wywoływane przez parser w przypadku napotkania błędu składni. |
IndentationError | Podnoszony, gdy występuje nieprawidłowe wcięcie. |
TabError | Wywoływane, gdy wcięcie składa się z niespójnych tabulatorów i spacji. |
SystemError | Podnoszone, gdy interpreter wykryje błąd wewnętrzny. |
SystemExit | Wychowany przez sys.exit() funkcję. |
TypeError | Wywoływane, gdy funkcja lub operacja jest stosowana do obiektu niepoprawnego typu. |
UnboundLocalError | Wywoływany, gdy następuje odwołanie do zmiennej lokalnej w funkcji lub metodzie, ale żadna wartość nie została powiązana z tą zmienną. |
UnicodeError | Wywoływane, gdy wystąpi błąd kodowania lub dekodowania związany z Unicode. |
UnicodeEncodeError | Wywoływane, gdy podczas kodowania wystąpi błąd związany z Unicode. |
UnicodeDecodeError | Wywoływane, gdy podczas dekodowania wystąpi błąd związany z Unicode. |
UnicodeTranslateError | Wywoływane, gdy podczas tłumaczenia wystąpi błąd związany z Unicode. |
ValueError | Wywoływane, gdy funkcja otrzymuje argument o poprawnym typie, ale niewłaściwej wartości. |
ZeroDivisionError | Podnoszony, gdy drugi argument operacji dzielenia lub modulo ma wartość zero. |
W razie potrzeby możemy również zdefiniować własne wyjątki w Pythonie. Aby dowiedzieć się więcej na ich temat, odwiedź stronę Wyjątki zdefiniowane przez użytkownika w języku Python.
Możemy obsłużyć te wbudowane i zdefiniowanym przez użytkownika wyjątków w Pythonie przy użyciu try
, except
oraz finally
oświadczenia. Aby dowiedzieć się więcej na ich temat, odwiedź Python try, z wyjątkiem i na końcu instrukcji.