Czy istnieje jakaś różnica między except:
i except Exception:
?Różnica między wyjątkiem: i wyjątkiem Wyjątkiem:
Czy można obsługiwać wszystko, co nie jest wyjątkiem?
Czy istnieje jakaś różnica między except:
i except Exception:
?Różnica między wyjątkiem: i wyjątkiem Wyjątkiem:
Czy można obsługiwać wszystko, co nie jest wyjątkiem?
Od wersji Python 2.5 dostępny jest nowy BaseException
, który służy jako klasa podstawowa dla Exception
. W rezultacie coś w rodzaju GeneratorExit, które jest bezpośrednio związane z BaseException
, zostanie przechwycone przez except:
, ale nie przez except Exception:
.
+1 za wspomnienie o 'BaseException'. Jedna ważna rzecz, która 'z wyjątkiem:' przechwytuje, że 'z wyjątkiem wyjątku:' nie jest 'KeyboardInterrupt'. Liberalne użycie nagiego 'except '' może utrudnić powstrzymanie twoich skryptów! – kindall
To prawda. [KeyboardInterrupt] (http://docs.python.org/2/library/exceptions.html#exceptions.KeyboardInterrupt) również dziedziczy po BaseException. – marcoseu
SystemExit również dziedziczy po BaseExcrption –
To z doc
Jeśli wystąpi wyjątek, który nie pasuje do wyjątku nazwie w wyjątkiem klauzuli, jest ona przekazywana do zewnętrznych instrukcji try; jeśli nie zostanie znaleziony handler , jest to nieobsługiwany wyjątek i wykonywanie kończy się z komunikatem , jak pokazano powyżej.
Możesz być nawet bardziej szczegółowy.
>>> while True:
... try:
... x = int(raw_input("Please enter a number: "))
... break
... except ValueError:
... print "Oops! That was no valid number. Try again..."
Tutaj wpisz wyjątkiem klauzuli tylko jeśli stoją nazwany błąd, ValueError
Nie, są funkcjonalnie identyczne :-) –
Faktycznie, Biorę to z powrotem - są one różne –