[Python-ideas] PEP 380 close and contextmanagers?

Nick Coghlan ncoghlan at gmail.com
Thu Oct 28 00:00:36 CEST 2010


On Thu, Oct 28, 2010 at 2:18 AM, Ron Adam <rrr at ronadam.com> wrote:
>
> It looks like No context managers return values in the finally or __exit__
> part of a context manager.  Is there way to do that?

The return value from __exit__ is used to decide whether or not to
suppress the exception (i.e. bool(__exit__()) == True will suppress
the exception that was passed in).

There are a few CMs in the test suite (test.support) that provide info
about things that happened during their with statement - they all use
the trick of returning a stateful object from __enter__, then
modifying the attributes of that object in __exit__. I seem to recall
the CM variants of unittest.TestCase.assertRaises* doing the same
thing (so you can poke and prod at the raised exception yourself).
warnings.catch_warnings also appends encountered warnings to a list
returned by __enter__ when record=True.

Cheers,
Nick.

-- 
Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia



More information about the Python-ideas mailing list