PYTHON

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