Ответ 1
При работе с файлами следует всегда использовать инструкцию with
. Например, используйте что-то вроде
with open("x.txt") as fh:
...do something with the file handle fh
Это гарантирует, что если во время выполнения блока with
что-то пойдет не так, и возникнет исключение, файл будет закрыт. Дополнительную информацию об этом см. В с документацией.
Изменить. После обсуждения в комментариях кажется, что OP должен одновременно открывать несколько файлов и использовать данные из нескольких файлов одновременно. Очевидно, что наличие множества вложенных операторов with
, по одному для каждого открытого файла, не является опцией и противоречит идеалу, что "квартира лучше, чем вложенная".
Один вариант - обернуть вычисление в блок try
/finally
. Например
file_handles = []
try:
for file in file_list:
file_handles.append(open(file))
# Do some calculations with open files
finally:
for fh in file_handles:
fh.close()
Блок finally содержит код, который должен запускаться после любого блока try
, except
или else
, даже если произошло исключение. Из документации:
Если присутствует
finally
, он указывает обработчик "очистка". Выполняется предложениеtry
, включая любые предложенияexcept
иelse
. Если исключение возникает в любом из предложений и не обрабатывается, исключение временно сохраняется. Выполняется предложениеfinally
. Если есть сохраненное исключение, оно будет повторно поднято в конце предложенияfinally
. Если предложениеfinally
вызывает другое исключение или выполняет оператор return или break, сохраненное исключение теряется. Информация об исключении недоступна программе во время выполнения предложенияfinally
.