6.9 Instrukcja raise

 

raise_stmt  ::=  "raise" [expression ["," expression ["," expression]]]
Pobierz całą gramatykę w postaci tekstowej.

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.