Уведомления

Группа в Telegram: @pythonsu

#1 Март 19, 2013 13:06:59

alexeyvanzhula
Зарегистрирован: 2012-05-14
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Зачем нужен finally

Обясните тугодуму. Зачем в исключениях finally. Судя по описанию блок исполняется после try или except - то есть в любом случае он будет выполнен. Но я не могу понять зачем оно нужно если код под except все равно дальше вниз будет исполнятся. Другими словами какая разница в:

try:
    someCommands1
except:
    someCommands2
finally:
    endCommands
и
try:
    someCommands1
except:
    someCommands2
endCommands

Офлайн

#2 Март 19, 2013 13:24:16

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Зачем нужен finally

finally как бы гарантирует выполнение, полезный пример сейчас не вспомню, но пример отличия вот:

def foo():
    try:
        return
    finally:
        print 'moo'

Офлайн

#3 Март 19, 2013 13:26:50

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Зачем нужен finally

try:
    f=open('uu.txt')
    a = int("k")
except:
    print "K is not int"
finally:
    print f 
    f.close()
 print f  

<open file 'uu.txt', mode 'r' at 0x00000000024BE390>
<closed file 'uu.txt', mode 'r' at 0x00000000024BE390>



Офлайн

#4 Март 19, 2013 13:58:48

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Зачем нужен finally

If an exception occurs in any of the clauses and is not handled, the exception is temporarily saved. The finally clause is executed. If there is a saved exception, it is re-raised at the end of the finally clause. If the finally clause raises another exception or executes a return or break statement, the saved exception is lost. The exception information is not available to the program during execution of the finally clause.

try:
    1 / 0
except:
    print 1
    raise Exception('!!!')
finally:
    print 2
Выдаёт:
1
2

Traceback (most recent call last):
File “<pyshell#14>”, line 5, in <module>
raise Exception('!!!')
Exception: !!!

Офлайн

#5 Март 19, 2013 23:52:00

alexeyvanzhula
Зарегистрирован: 2012-05-14
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Зачем нужен finally

Shaman
clause

Этого ответа и ожидал. Теперь все встало на свои места. Спасибо всем!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version