SAMOUCZEK JĘZYKA PYTHON ROZDZIAŁY   
Rozdział 8: Klasy

1: Terminologia- 2: Przestrzenie i zasięgi nazw w Pythonie- 3: Składnia definicji klasy - 4: Obiekty klasy
5: Obiekty konkretu klasy- 6: Obiekty metod- 7: Luźne uwagi - 8: Dziedziczenie- 9: Dziedziczenie wielorakie
10: Zmienne prywatne- 11: Sztuczki i chwyty - 12: Wjątki mogą być klasami

Lekcja 12: Wyjątki mogą być klasami


Wyjątki definiowane przez użytkownika nie są już ograniczone tylko do obiektów napisów -- można również użyć klas. Poprzez użycie tego mechanizmu można stworzyć rozszerzalną hierarchię wyjątków.

Istnieją dwie poprawne formy instrukcji zgłoszenia wyjątku:

raise Klasa, konkret

raise konkret

W pierwszej formie, konkret musi być konkretem klasy Klasa lub klasy pochodnej od niej. Druga forma jest skróconym zapisem dla:

raise konkret.__class__, konkret

Klauzula except instrukcji try może zawierać również listę klas. Klasa w tej klauzuli odpowiada zgłoszonemu wyjątkowi, jeśli jest tej samej klasy co wyjątek lub jego klasą bazową (i nie inaczej - lista klas pochodnych w klauzuli except nie odpowiada wyjątkom, które są ich klasami bazowymi). Na przykład, wynikiem działania poniższego kodu będzie wyświetlenie B,C,D w takim właśnie porządku:

class B:
    pass
class C(B):
    pass
class D(C):
    pass

for c in [B, C, D]:
    try:
        raise c()
    except D:
        print "D"
    except C:
        print "C"
    except B:
        print "B"
Trzeba zauważyć, że jeżeli klauzula except byłaby odwrócona (tzn. " except B" na pierwszym miejscu), program wyświetliłby B, B, B - uruchamiany jest kod pierwszej pasującej klauzuli.

Gdy wyświetlany jest komunikat o błędzie w przypadku niewyłapanego wyjątku klasowego, wyświetlana jest nazwa klasy, potem dwukropek i spacja, a następnie konkret klasy wyjątku przekształcony do napisu za pomocą funkcji wbudowanej str().

Strona główna - O Pythonie - Interpreter - Samouczek - Przykłady programów - Linki