/ / Używa wyjątku jako podejścia goto pyton? - python

Czy używanie wyjątku jest podejściem pytonowym? - python

Mam złożony zestaw warunków, z których chciałbym wyjść, gdy tylko się spełni.

Do tego chciałbym użyć a try: / except: struktura wokół nich, aby wyjść we właściwym czasie, co jest podobne do a goto. Pogmatwany przykład (używając raise do break od while) byłoby:

class Minor(Exception):
pass
class Major(Exception):
pass

age = 15
while True:
try:
if age > 18:
raise Major
else:
raise Minor
except Major:
print("major")
break
except Minor:
print("minor")
break

Czy takie użycie wyjątków pythonic? Innymi słowy: czy wyjątki miały na celu jedynie złapanie czegoś, co inaczej byłoby w przypadku Tracebacku, czy też mają one ogólne zastosowanie, jak wyżej?

EDYCJA: po komentarzach, chciałbym wyjaśnić, że nie patrzę, jak uprościć ten konkretny kawałek kodu - prawdziwy kod jest znacznie bardziej skomplikowany z zagnieżdżonymi pętlami i warunkami. Część, która mnie interesowała, to czy istnieją powody, by szczególnie zniechęcać do korzystania z wyjątków.

Odpowiedzi:

4 dla odpowiedzi № 1

Nie, nie jest to podejście pytoniczne. Zwykłą metodą sterowania przepływem używaną do natychmiastowego wyjścia z zagnieżdżonych pętli jest umieszczenie logiki w funkcji i użycie znaku a return komunikat.

PEP 3136 był kiedyś proponowany jako sposób na ucieczkę z zagnieżdżonych pętli za pomocą etykietowania break i continue:

Oznaczona przerwa i kontynuacja mogą poprawić czytelność i elastyczność złożonego kodu, który wykorzystuje zagnieżdżone pętle.

Ta metoda PEP została odrzucona dla Python 3.1. Guido napisał:

Odrzucam go na podstawie tak skomplikowanego kodu wymagają tej funkcji jest bardzo rzadkie. W większości przypadków istnieją obejścia, które zapewniają czysty kod, na przykład za pomocą "powrotu".