Dlaczego Python wyjątki są nazwane "Error" (np ZeroDivisionError
, NameError
, TypeError
) a nie "Wyjątek" (np ZeroDivisionException
, NameException
, TypeException
).
Pochodzę z Javy i niedawno zacząłem uczyć się Pythona, ponieważ jest to zagmatwane, ponieważ w Javie istnieje różnica między błędami a wyjątkami.
Czy jest też różnica w Pythonie, czy nie?
Warning
. Proszę zobaczyć moją odpowiedź .Uważam, że ta konwencja pochodzi z PEP 8 - Style Guide for Python Code :
źródło
Pod tym względem Python jest dość podobny do Javy. Ale wyjątek Pythona należy porównać do Throwable Javy.
Ponieważ elementy Throwables są dostępne w różnych odmianach - Error, RuntimeException i (Check) Exception - tak samo jest z Pythonem (choć nie ma zaznaczonych wyjątków).
Jeśli chodzi o język, błąd jest wyjątkowy, więc hierarchia dziedziczenia nie jest dziwna.
Nie podoba mi się jednak nazwa Exception. Wyjątki są używane nie tylko w wyjątkowych okolicznościach (takich jak, miejmy nadzieję, Błędy), ale także po to, aby wydostać się z przepływu kontroli. Ponieważ to właśnie robi Wyjątek; wyskakuje poza normalny przepływ kontroli do zaznaczonego punktu. Trochę jak goto, ale bardziej wyrafinowany.
To powiedziawszy, za każdym razem, gdy masz sytuację, w której nie można znaleźć odpowiedniej wartości zwracanej, zwykle używasz wyjątku. Zarówno w Pythonie, jak iw Javie.
źródło
Error
w nazwie.Przypuszczam, że dzieje się tak, ponieważ większość wyjątków w Pythonie jest klasyfikowanych jako błędy lub ostrzeżenia . Gdyby nazwy wyjątków w Pythonie kończyły się na
Exception
, to rozróżnienie nie byłoby możliwe.Przykładami ostrzeżeń są
DeprecationWarning
iImportWarning
.Proszę zapoznać się z klasy hierarchii 2.x dla wbudowanego wyjątkami , jak również, że dla 3.x .
źródło
Mówiąc najprościej:
Exception
Może być podniesiony także bezpośrednioPojęcie:
LUB
Zwykle byłby to błąd, ale zrobimy wyjątek, złapiemy go i wykonamy jakąś procedurę.
Detale:
Wyjątki a błędy:
https://docs.python.org/2/tutorial/errors.html
Przepływ pracy:
źródło
To tylko nazywanie. W Javie
java.lang.Error
różni się od innych,Throwable
ponieważ tego rodzaju błędy muszą być odznaczone. W Pythonie wszystkie wyjątki są odznaczone, więc rozróżnienie jest trochę bezcelowe.źródło
class ExceptionHandlingException extends RuntimeException
a to jest po prostu okropne do przeczytania.