Откройте файл перед try и закройте его в finally. Тогда закрытие выполнится и при ошибке чтения или вывода.
Чтение файла без использования конструкции with
Откройте файл перед try и закройте его в finally. Тогда закрытие выполнится и при ошибке чтения или вывода.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Перепишите приведённый фрагмент кода, открыв файл явно и закрыв его вручную, не используя контекстный менеджер with. Логика работы программы должна остаться неизменной.
with open('text.py', 'r') as file:
print(file.read())
Ответ
Откройте файл перед try и закройте его в finally. Тогда закрытие выполнится и при ошибке чтения или вывода.
file = open('text.py', 'r')
try:
print(file.read())
finally:
file.close()
Если open завершится исключением, блока try ещё не будет: закрывать несуществующий файловый объект не требуется. После успешного открытия finally сработает при нормальном выполнении и при исключении из read или print.
Простой последовательный вызов file.close() без finally недостаточен — при ошибке выполнение до него не дойдёт. Для обычной работы исходный with предпочтительнее: он выражает тот же жизненный цикл короче и уменьшает вероятность утечки ресурса.