2012-12-19 16 views

Odpowiedz

214

Ma 2 cele.

yentup has given the first one.

Jest używany do podnoszenia własnych błędów.

if something: 
    raise Exception('My error!') 

Drugi jest przebić się bieżący wyjątek obsługę wyjątków, tak, że może być poddawany dalszej obróbce na stos połączenia.

try: 
    generate_exception() 
except SomeException as e: 
    if not can_handle(e): 
    raise 
    handle_exception(e) 
+15

Wprowadziłem to i otrzymałem "globalną nazwę" błąd "nie jest zdefiniowany". Dla innych nowych w Pythonie, potrzebujesz "raise Exception (" My error! ")". Zamieniasz "błąd" na swoją nazwę wyjątku. Lista standardowych wyjątków, których możesz użyć, znajduje się tutaj: http://docs.python.org/2/library/exceptions.html –

+2

Zauważ, że w Pythonie 3.x nowa składnia to 'except SomeException as e:' – user1735003

+0

@ user1735003 , co robi 'jak e'? Czym różni się od 'exceptException'? –

28

Służy do podnoszenia błędów.

if something: 
    raise Exception('My error!') 

Przykłady here

6

raise powoduje wyjątek być podniesiony. Niektóre inne języki używają zamiast tego słowa "rzut".

Jest przeznaczony do sygnalizowania sytuacji błędu; zaznacza, że ​​sytuacja jest wyjątkowa w stosunku do normalnego przepływu.

Wyniesione wyjątki mogą zostać ponownie przechwycone przez kod "w górę" (otaczający blok lub funkcja wcześniej na stosie), aby obsłużyć go, używając kombinacji try, except.

6

Można go używać do podnoszenia błędy w ramach sprawdzania błędów:

if (a < b): 
    raise ValueError() 

Albo obsługiwać kilka błędów, a następnie przekazać je w ramach obsługi błędów:

try: 
    f = open('file.txt', 'r') 
except IOError: 
    # do some processing here 
    # and then pass the error on 
    raise 
17

raise bez żadnych argumentów jest specjalnym zastosowaniem składni pythona. Oznacza to uzyskać wyjątek i ponownie go podnieść. Jeśli to użycie mogło zostać nazwane reraise.

raise 

Od The Python Language Reference:

przypadku braku wyrażenia są obecne, podnieść ponownie podnosi ostatniego wyjątku że był aktywny w bieżącym zakresie.

Jeśli raise jest stosowany samodzielnie bez jakiegokolwiek argumentu jest ściśle stosować do przebicie -ing.Jeśli odbywa się w sytuacji, która nie jest na przebicie innego wyjątku, jest następujący błąd pokazany: RuntimeError: No active exception to reraise

5

Poza raise Exception("message") i raise Python 3 wprowadzono nową formę, raise Exception("message") from e. Nazywa się to łańcuchem wyjątków, pozwala zachować oryginalny wyjątek (przyczynę źródłową) z jego śledzeniem.

Jest bardzo podobny do wewnętrznych wyjątków od C#.

Więcej informacji: https://www.python.org/dev/peps/pep-3134/

Powiązane problemy