Dlaczego potrzebna jest klauzula „finally” w Pythonie?

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.

Twoja odpowiedź

Zaloguj się aby odpowiedzieć.

Operiada

Operiada to polskojęzyczne forum informatyczne działające na zasadzie pytań i odpowiedzi.

Obserwowane tagi

Zaloguj się aby obserwować tagi.