Python – kiedy używać finally w try/except?

21-gru-2019

Odpowiadając krótko – wtedy kiedy chcesz mieć pewność że jakieś instrukcje wykonają się NA PEWNO i ZAWSZE. Nawet w bardzo dziwnych i nietypowych sytuacjach.

Zazwyczaj np. uważamy, że kod w funkcji po słowie return się nie wykona:

def DoSomething(a,b):

c=a+b
 return c
 c=3+3
 return c
 
DoSomething(1,1)

i rzeczywiście tak jest:

Out[66]: 2

Ale kiedy popatrzysz na taki zwariowany kod:

def TestTryCatchFinally(a,b):
   try:
      print('starting TRY')
      c = a / b 
      print('ending TRY')
      return c
   except:
      print('starting EXCEPT')
      c = b / a
      print('ending EXCEPT')
      return -1
   finally:
      print('starting FINALLY')
      c = 9
      return c
      print('ending FINALLY')

i wywołasz go tak:

TestTryCatchFinally(1,2)
starting TRY
ending TRY
starting FINALLY
Out[68]: 9

To zobacz, że kod z bloku finally się wykonał, pomimo tego, że wykonywał się kod w try!

TestTryCatchFinally(1,0)
starting TRY
starting EXCEPT
ending EXCEPT
starting FINALLY
Out[69]: 9

Tutaj finally wykonał sie mimo błedu w try

TestTryCatchFinally(0,0)
starting TRY
starting EXCEPT
starting FINALLY
Out[70]: 9

A tutaj mimo błedu w try i except.

Finally jest „nie do zabicia”… dlatego stosujemy go np. do zamknięcia plików, usunięcia roboczych danych itp.

 

Komentarze są wyłączone

Autor: Rafał Kraik