contextlib.closing is an adapter for using objects that have a close method but have not be modernized to be context managers by having _enter__ and __exit__ methods added. Its doc gives the example with closing(urlopen('http://www.python.org')) as page: This is now obsolete as the object returned is now a context manager. A shelf instance would make a better example now, but... I think it reasonable to update shelve.Shelf also. I believe def __enter__(self): return self def __exit__(self, e_typ, e_val, tb): self.close() are all that are needed. (Nick, true?)