Больная тема, на самом деле. Пример кода:
proc fileop(filename,data_size_required,num_iters):
fileobj=open(filename)
result=0
for z in range(num_iters):
data=fileobj.read(data_size_required)
result=proceed(data,result)
fileobj.close()
return result
Допустим, во время чтения возникнет IOError или proceed(data) совершит исключение — что тогда? Рассуждая здраво, поскольку fileobj есть локальная переменная, то будет вызван деструктор и бла-бла-бла.... НО:
1. В самом что ни на есть кошерном описании, взятом прямиком с
www.python.org я не нашел указания на то, что при уничтожении объекта типа файл будет
вызван close()
2. Зато я нашел типа туманные намеки на то, что при возникновении исключений вызов деструктора не гарантирован.
Казалось бы, мелочь, достаточно поставить
try:/finally: -- и все дела. А если в обработке участвуют несколько файлов? Все обложить несколькими вложенными
try:/finally: ? Не догоняю....