Форум сайта python.su
объясните пожалуйста, зачем нужен finally?
вот пример:
try:
self.lock.lockForWrite()
self.num[0] *= 5;
time.sleep(1.5)
self.num[0] /= 4;
finally:
self.lock.unlock()
try:
self.lock.lockForWrite()
self.num[0] *= 5;
time.sleep(1.5)
self.num[0] /= 4;
self.lock.unlock()
Офлайн
finally гарантирует выполнение кода, если в блоке try произошла ошибка (было выброшено исключение). В данном случае, если не использовать try-finally, то в случае ошибки lock останется заблокированным и не даст остальным объектам получить доступ к ресурсу.
Офлайн
А self.lock.lockForWrite() должен выполняться до try.
..bw
Офлайн
ну это не мой код, так для примера
получается finally используют тогда, когда лень писать блок except?
ведь если написать except - то после него код будет работать дальше
Офлайн
import sys
try:
try:
raise ValueError('wtf')
except TypeError:
pass
print('finally fail')
finally:
print('finally win')
finally win
Traceback (most recent call last):
File “C:\Python26\test.py”, line 4, in <module>
raise ValueError('wtf')
ValueError: wtf
Офлайн
Игнат
ну это не мой код, так для примера
получается finally используют тогда, когда лень писать блок except?
ведь если написать except - то после него код будет работать дальше
try:
code1
finally:
code2
try:
code1
except:
pass
code2
e = None
try:
code1
except Exception e:
pass
code2
if e: raise e
Офлайн
finally работает даже если внутри try вызвать sys.exit
Офлайн
> даже если внутри try вызвать sys.exit
Даже не смешно :-). Т.е. это не показатель.
sys.exit() возбуждает исключение и всего-то, например, такой выход работать не будет:
import sys
try:
sys.exit()
except SystemExit:
pass
Офлайн
Простейший пример:
try:
f = open('file', 'w')
# do something with file content
except:
print 'fail'
finally:
f.close()
Офлайн
Python nazi тебе скаже:
from __future__ import with_statement
with open('file', 'w') as f:
"""do something with file content"""
Отредактировано (Янв. 23, 2011 01:05:43)
Офлайн