Jeśli masz do czynienia z API, którego nie napisałeś, które zwraca wartości prawdy na temat sukcesu i wartości falsy w przypadku niepowodzenia, wydaje się to rozsądnie czytelnym i kompaktowym sposobem. Jeśli masz kontrolę nad interfejsem API, zachęcam do używania wyjątków zamiast zwracania wartości w celu wskazania błędów.
Jeśli używasz tej funkcji, prawdopodobnie nie powinna ona być wywoływana die()
, chyba że faktycznie wychodzi z programu. Jeśli tylko podniesie wyjątek, nie ma gwarancji, że program faktycznie umrze. Idealnie można nazwać ją raise()
jako funkcjonalną wersję oświadczenia raise
, ale oczywiście nie można, ponieważ raise
jest słowem zastrzeżonym. Być może throw()
.
Dobrym pomysłem byłoby również wymaganie od osoby dzwoniącej, aby przekazała typ wyjątku, ponieważ Exception
jest raczej ogólny i niejednoznaczny.
Wydaje mi się, że ta funkcja byłaby zbędna, gdyby tylko wyjątki Python były zdolne do podnoszenia się, to znaczy, że mieli sposobu na to, jak w przykładzie:
class BaseException(object):
def throw(self):
raise self
Następnie można po prostu zrobić:
check_something() or Exception("check failed").throw()
Niestety, wyjątki Python nie mogą się same podnieść.:-)
co jest nie tak z 'if'? – JBernardo
Wydaje mi się bardziej logiczne, że 'check_something' powinno być funkcją podnoszącą wyjątek, zamiast zwracać True/False. Umożliwiłoby to również uzyskanie bardziej przydatnych komunikatów o błędach, jeśli połączenie z 'check_something' może się nie powieść na wiele sposobów. Weź też pod uwagę, że twoja obecna implementacja 'die' nie pozwala na podniesienie żadnej klasy Exception poza podstawową klasą Exception, co wydaje mi się raczej ograniczone. – Ponkadoodle
Nie używam tego teraz, ale pomysł przyszedł mi, gdy natknąłem się na 'die()' w PHP. Powyższy kod jest tylko przykładem tego, jak można "umrzeć". – warvariuc