raise_stmt |
::= | "raise" [expression ["," expression
["," expression]]] |
Jeśli po słowie kluczowym raise nie występuje żadne wyrażenie, instrukcja powoduje ponowne wygenerowanie ostatniego wyjątku, który był aktywny w bieżącym zasięgu. Jeśli w bieżącym zasięgu nie był aktywny żaden wyjątek, generowany jest wyjątek sygnalizujący ten błąd.
W przeciwnym wypadku wartościowane są trzy wyrażenia, występujące po
słowie raise, przy czym w miejce pominiętych wyrażeń wstawiana
jest wartość None. Pierwsze dwa obiekty są używane do określenia
typu oraz wartości wyjątku.
Jeśli pierwszy obiekt jest instancją, typem wyjątku jest klasa tej
instancji, instancja jest jego wartością, zaś wartością drugiego obiektu
musi być None.
Jeśli pierwszy obiekt jest klasą, staje się on typem wyjątku, zaś drugi
obiekt używany jest do określenia wartości wyjątku. Jeśli drugi obiekt
jest instancją klasy podanej jako pierwszy obiekt, staje się on wartością
wyjątku. Jeśli drugi obiekt nie spełnia tego warunku, tworzona jest nowa
instancja klasy, z listą argumentów konstruktora ustaloną w sposób
następujący: jeśli drugi obiekt jest krotką, to stanowi listę argumentów,
jeśli ma wartość None, to lista argumentów jest pusta, w pozostałych
przypadkach lista argumentów konstruktora zawiera jeden element, którym jest
drugi obiekt. Utworzona w ten sposób instancja klasy jest używana jako
wartość wyjątku.
Jeśli w instrukcji występuje trzeci obiekt i jego wartością nie jest
None, musi to być obiekt stanu stosu (patrz
sekcja 3.2). Jest on wówczas używany zamiast bieżącego położenia
do identyfikacji miejsca, w którym wystąpił wyjątek. Jeśli trzeci obiekt
występuje, lecz nie jest obiektem stanu stosu, ani wartością None,
generowany jest wyjątek TypeError.
Postać instrukcji raise z trzema wyrażeniami jest przydatna przy
ponownym generowaniu wyjątków w klauzuli except w sposób przezroczysty, jednak
w przypadku, gdy ponownie generowany wyjątek był ostatnim aktywnym wyjątkiem
w bieżącym zasięgu, preferowana powinna być postać instrukcji raise
bez wyrażeń.
Dodatkowe informacje na temat wyjątków można odnaleźć w sekcji 4.2, zaś informacje na temat obsługi wyjątków -- w sekcji 7.4.
Zajrzyj do Informacji na temat tej publikacji... aby pomóc w jej rozwoju.