Thanks, Mark... I had missed that aspect entirely.

I think there might be a way round it... which actually was something I had been thinking of including in the same suggestion but thought was perhaps too obscure, but now I've realized it would integrate well with it.  That is to have a value-returning form of try... except...
But perhaps the two of them together are too much of a change.


On Mon, Oct 25, 2021 at 10:03 PM Mark Gordon <> wrote:
What should happen if the context manager attempts to suppress a raised exception? In cases where you applied the context manager to an entire line, e.g.

data = fail() with contextlib.suppress(Exception)

Then it would make sense to treat it like

with contextlib.suppress(Exception):
    data = fail()

Where `data` remains unassigned after the block executes assuming `fail` raises an exception. However, with the initial proposal you run into trouble when you apply this to sub-expressions that are expected to themselves have a value. For example, what should happen here?

more_work(fail() with contextlib.suppress(Exception))

We have no value to pass as an argument to `more_work` so there's no way we can call it. Yet it would be odd to not call it if there's no exception being raised since it exists outside of any context manager itself.
Python-ideas mailing list --
To unsubscribe send an email to
Message archived at
Code of Conduct: