все Python 3contextlibпонятие
contextlib.closing
закрытие
Оборачивает объект, чтобы его метод close() вызывался автоматически при выходе из блока with.
Синтаксис
contextlib.closing(thing)
Нужен только тем объектам, у которых есть close(), но нет протокола with. Файлы, сокеты и ответы urlopen в современном Python уже сами контекстные менеджеры, так что оборачивать их в closing бессмысленно — это приём для чужих или старых API. close() будет вызван и при нормальном выходе, и при исключении, но ошибки внутри самого close() не подавляются.
Примеры
from contextlib import closing
# Сетевой пример — только для чтения, запускать в песочнице не нужно:
# from urllib.request import urlopen
# with closing(urlopen('http://example.com')) as page:
# data = page.read() # page.close() вызовется автоматически
class Res:
def close(self): print('closed')
with closing(Res()) as r:
pass # → closed
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности