Nie jestem pewna, dlaczego potrzebujemy finally
w try...except...finally
. Moim zdaniem ten blok kodu :
try:
uruchom_kod1()
except TypeError:
uruchom_kod2()
inny_kod()
jest tym samym, co używając "finally"
try:
uruchom_kod1()
except TypeError:
uruchom_kod2()
finally:
inny_kod()
1 odpowiedź
Różnica jest wtedy gdy return
będzie wcześniej
try:
uruchom_kod1()
except TypeError:
uruchom_kod2()
return None # Ostatecznie blok jest uruchamiany przed powrotem metody
finally:
inny_kod()
porównaj to sobie z:
try:
uruchom_kod1()
except TypeError:
uruchom_kod2()
return None
inny_kod() # Nie uruchamia się, jeśli istnieje wyjątek.
Są też inne sytuacje, które mogą powodować różnice:
-Jeśli wyjątek zostanie zgłoszony w bloku wyjątku
-Jeśli wyjątek zostanie zgłoszony w uruchom_kod1(), ale nie jest to błąd typu.
-Inne instrukcje przepływu sterowania, takie jak instrukcje kontynuowania i przerwania.