Файл Python закрывается при выходе из программы

Если бы я хотел закрыть файл в программе с бесконечным циклом, я мог бы сделать следующее:

file = open('abc', 'w')

while True:
    try:
        file.write('a\n')
    except KeyboardInterrupt:
        break

file.close()

Но если бы я просто оставил это так:

file = open('abc', 'w')

while True:
    file.write('a\n')

Не будет ли файл закрыт при выходе?


person Novice    schedule 20.07.2016    source источник
comment
Возможный дубликат Закрываются ли файлы во время выхода из исключения?   -  person Lex Scarisbrick    schedule 20.07.2016


Ответы (2)


В Python есть автоматическая сборка мусора. Сборка мусора — это автоматическая очистка неиспользуемых дескрипторов файлов или данных в памяти. Когда программа Python останавливается, если она остановилась правильно, она освобождает память и файловые дескрипторы, которые она использовала при закрытии. Целесообразно иметь представление о том, как работает сборка мусора, при написании программ, которые выполняются в течение продолжительных периодов времени или обращаются к большому количеству информации или файлов.

person Mitch Jackson    schedule 20.07.2016
comment
Закрытие файлов при выходе из программы не имеет ничего общего со сборкой мусора. - person chepner; 20.07.2016
comment
Я думаю, это зависит от того, что вы подразумеваете под закрытым. Если программа Python завершилась либо из-за прерывания, либо из-за нормального завершения, она освободит все дескрипторы файлов, которые она открыла. В Perl, с которым я знаком гораздо лучше, если функция, которая открыла файл, завершается, и сборщик мусора определяет, что дескриптор файла больше не имеет ссылок, дескриптор файла будет освобожден, а файл будет «закрыт». ' Если вы беспокоитесь о блокировке файлов, это довольно условно. И не относящийся к примеру программы. - person Mitch Jackson; 20.07.2016
comment
Также другие отличные ответы на тот же вопрос - person Mitch Jackson; 20.07.2016

Как упоминалось выше @Mitch Jackson, если программа python корректно останавливается, она освобождает память. В вашем случае, поскольку вы просто открываете файл в цикле while. Программа не сможет закрыть уже открытый файл, когда он остановится, если вы явно не включите обработку исключений, например оператор try-catch block или with, который завершает его.

Вот документация по оператору with: docs

person Rajat Vij    schedule 20.07.2016