Możliwość uzyskania wyjątku podniesiony, a następnie po prostu połknięcia, ponieważ yo używasz continue
jest silnym argumentem, ale wyjątek jest również połknięty, gdy zamiast tego używasz break
lub return
.
Na przykład to działa i wyjątek połknięcia:
for i in range(10):
print i
try:
raise Exception
finally:
break
print i # not gonna happen
To znowu działa bez błędu (jeśli w funkcji) i wyjątek połknięcia zbyt:
for i in range(10):
print i
try:
raise Exception
finally:
return
print i # not gonna happen
Więc dlaczego będzie break
i return
być dozwolone w bloku finally
, z lub bez możliwych błędów podnoszonych, ale continue
nie?
Można również rozważyć kombinację następujących czynników w numerze:
finally
jest zawsze wykonywany;
continue
"Przerywa" bieżącą iterację.
będzie to oznaczać, że wewnątrz każdej pętli, z powodu finally
zawsze wykonywać, będziesz zawsze mieć continue
czarownicę zasadzie mówi „przerwanie bieżącej iteracji”, „przerwanie bieżącej iteracji”, „przerwanie bieżącej iteracji” .. Czarownica naprawdę nie ma żadnego sensu. Ale nie ma sensu również używać break
i return
. Bieżąca iteracja jest również przerywana z jedyną różnicą , która kończy się na jednej iteracji.
Pytanie "Dlaczego nie jest dozwolone continue
w finally
?" można również zadać pytanie "Dlaczego dozwolone są break
i return
?".
Może dlatego, że nie miało sensu w tym momencie? To była decyzja deweloperów, a teraz tak jest? Oczywiście, może to być również lenistwo realizatora, ale kto wie, może mieli coś na myśli i być może, w innej wersji Pythona, byłoby więcej sensu, aby mieć inny sposób?
Pomysł jest taki, że przykłady tutaj są po prostu ekstremalne. Nie piszesz po prostu takiego kodu, prawda? Z pewnością będzie pewna logika w bloku finally
, aby powiedzieć, kiedy do break/return/continue
, cokolwiek, a nie tylko tak to stępić. Jako takie, IMHO continue
wewnątrz finally
powinno być dozwolone, ponieważ byłbym wdzięczny napisanie czystego kodu przy użyciu continue
w finally
, jeśli tego właśnie potrzebuję, zamiast uciekania się do obejścia tego ograniczenia kodu (tj. W filozofii Pythona "Wszyscy jesteśmy zgoda dorosłych tutaj ").
Wygląda jak czyste lenistwo? http://www.gossamer-threads.com/lists/python/dev/484210 –
@Mike Christensen: Znalazłem również ten wątek, ale doktorzy mówią: "kontynuuj może wystąpić tylko syntaktycznie zagnieżdżone w pętli for lub while, ale nie zagnieżdżone w definicji funkcji lub klasy ** lub w klauzuli finally w tej pętli ** ". Czy to lenistwo, czy to było coś celowego, co później wymagało zmiany? ... jak wiele rzeczy w Pythonie ... – ElenaT
Czy przeczytałeś cały wątek? - Istnieje kilka interesujących informacji na temat tego, co to znaczy "kontynuować" w bloku finally i różne problemy, które mogą pojawić się. Warto przeczytać. –