PYTHON Obsługa wyjątków
Program składniowo poprawny nadal może generować błędy. Niezależnie od stopnia zaawansowania programisty.
Język Python daje narzędzia by te wyjątki przechwycić i zamiast wyrzucać błąd na ekran, obsłużyć w zadany przez nas sposób.
Składnia:
try :
instrukcje
except (rodzaj_błędu) :
instrukcje
except (rodzaj_błędu) :
instrukcje
....
else :
instrukcje
finally :
instrukcje
try : jest blokiem wewnątrz którego zamykamy instrukcje, które potencjalnie mogą wywołać błąd, np. iloraz, w którym dzielnik może posiadać wartość 0
except : to blok obsługi błędu, w nawiasie okrągłym podajemy rodzaj błędu, a w instrukcjach sposób jego obsługi, np. stosowny komunikat
Bloków except może być wiele.
Opcjonalny blok else : tu umieścimy instrukcje, które mają się wykonać wyłącznie wtedy, gdy nie wychwycono żadnych błędów.
Opcjonalny blok finally : umieścimy tu instrukcje, które mają się wykonać zawsze, niezależnie, czy błąd został wychwycony czy nie.
Przykład:
liczba = input("Podaj dowolną liczbę całkowitą:")
try:
x = int(liczba)
y = 10 / x
except (ZeroDivisionError) :
print("Nie dzielimy przez 0!")
except :
print("Podano niewłaściwą wartość")
else :
print(y)
finally :
print("Zrobione!")
Pobranie wartości zmiennej liczba od użytkownika jest poza blokiem try. Wykona się zawsze.
Blok try : zawiera potencjalnie niebezpieczne instrukcje zamiany tego, co podał użytkownik na liczbę całkowitą oraz wynik dzielenia przez nią. Potencjalnie użytkownik mógł podać np. wartość 0 lub tekst zamiast liczby.
except (ZeroDivisionError) : próba wychwycenia błędu dzielenia przez 0
except : próba wychwycenia dowolnego innego błędu
else : w przypadku, kiedy nie było błędów, wypisz na ekran wartość y
finally: na koniec tak czy inaczej wypisz Zrobione!
Efekt dla wartości 5:
Podaj dowolną liczbę całkowitą:5
2.0
Zrobione!
Efekt dla wartości 0:
Podaj dowolną liczbę całkowitą:0
Nie dzielimy przez 0!
Zrobione!
Efekt dla wartości ‘Pies’:
Podaj dowolną liczbę całkowitą:Pies
Podano niewłaściwą wartość
Zrobione!
Najczęstsze rodzaje błędów:
- ArithmeticError: Klasa bazowa wyjątków wbudowanych wywoływanych w przypadku wystąpienia różnych błędów arytmetycznych: OverflowError, ZeroDivisionError, FloatingPointError
- LookupError: Klasa bazowa wyjątków wywoływanych w przypadku użycia niewłaściwego klucza lub indeksu dla uzyskania dostępu do elementów sekwencji: IndexError, KeyError
- EOFError: Wywoływany w przypadku, gdy jedna z funkcji wbudowanych input() lub raw_input() osiągnie koniec pliku (EOF)
- FloatingPointError: Wywoływany w przypadku błędu operacji zmiennoprzecinkowej.
- IOError: Wywoływany w przypadku wystąpienia błędu operacji wejścia/wyjścia instrukcji print, funkcji wbudowanej open() czy też metod obiektów plikowych
- ImportError: Wywoływany w przypadku wystąpienia błędu instrukcji import
- IndexError: Wywoływany w przypadku użycia indeksu spoza zasięgu
- KeyError: Wywoływany w przypadku nie wystąpienia klucza
- MemoryError: Wywoływany w przypadku wyczerpania się pamięci operacji
- NameError: Wywoływany w przypadku nieodnalezienia lokalnej lub globalnej nazwy
- OverflowError: Wywoływany w przypadku wystąpienia wyniku operacji arytmetycznej, który jest zbyt duży aby mógł być reprezentowany.
- SyntaxError: Wywoływany w sytuacji, gdy parser napotka błąd składniowy.
- TypeError: Wywoływany w sytuacji wykonania operacji wbudowanej na obiektu niewłaściwego typu.
- ValueError: Wywoływany w przypadku wywołania operacji z argumentem właściwego typu, lecz o nieprawidłowej wartości
- ZeroDivisionError: Wywoływany w przypadku, gdy drugi argument operacji dzielenia lub reszty z dzielenia (modulo) jest równy zero
Testy przypięte do lekcji | |
---|---|
Aby uzyskać dostęp do testów i ćwiczeń interaktywnych - Zaloguj się |