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.





























