Еще раз о деструкторах в Python
От: Аноним  
Дата: 24.12.08 09:17
Оценка:
Больная тема, на самом деле. Пример кода:


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: ? Не догоняю....
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.