Открытие нескольких (неопределенное количество) файлов одновременно и обеспечение их правильного закрытия

Я осознавая, что я могу открыть несколько файлов, например,

with open('a', 'rb') as a, open('b', 'rb') as b:

Но у меня есть ситуация, когда у меня есть список файлов, которые нужно открыть, и мне интересно, какой предпочтительный метод сделать то же самое, когда количество файлов заранее неизвестно. Что-то вроде

with [ open(f, 'rb') for f in files ] as fs:

(но это не удается с AttributeError , поскольку список не реализует __ exit __ )

Я не против использовать что-то вроде,

try:
    fs = [ open(f, 'rb') for f in files ]

    ....

finally:
    for f in fs:
        f.close()

Но я не уверен, что будет, если какие-то файлы выкинут при попытке их открыть. Будет ли fs правильно определен с файлами, которые удалось открыть, в блоке finally ?

20
задан Petros Koutsolampros 7 March 2014 в 23:52
поделиться