← retour aux snippets

contextlib.closing: garantir la fermeture d'un objet

Utiliser closing pour des objets avec close() mais sans __enter__/__exit__.

objectif

Utiliser closing pour des objets avec close() mais sans enter/exit.

code minimal

from contextlib import closing
class R:
    def __init__(self): self.closed = False
    def close(self): self.closed = True
r = R()
with closing(r):
    pass
print(r.closed)  # attendu: True

utilisation

from contextlib import closing
import io
buf = io.BytesIO(b"x")
with closing(buf):
    data = buf.read()
print(data == b"x")

variante(s) utile(s)

from contextlib import closing
print(callable(closing))

notes

  • Pratique pour intégrer des objets tiers dans un with.
  • closing(x) renvoie un context manager qui appelle x.close() à la sortie.