Python Glossary English

все 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Сообщить о неточности