[Python-ideas] with ... except
masklinn at masklinn.net
Fri Mar 8 11:54:25 CET 2013
On 2013-03-08, at 11:33 , Antoine Pitrou wrote:
> Le Fri, 8 Mar 2013 11:24:02 +0100,
> Masklinn <masklinn at masklinn.net> a écrit :
>> On 2013-03-08, at 11:13 , Antoine Pitrou wrote:
>>> A common pattern for me is to write a with statement for resource
>>> cleanup, but also handle specific errors after that. Right now,
>>> this is a bit cumbersome:
>>> with open("somefile", "rb)" as f:
>>> except FileNotFoundError:
>>> # do something else, perhaps actually create the file
>>> with transaction.commit_on_success():
>>> except ObjectDoesNotExist:
>>> # do something else, perhaps clean up some internal cache
>>> How about adding syntax sugar for the above, in the form of a
>>> with ... except clause? It would nicely reduce spurious
>>> indentation, as with the try / except / finally which, long ago(!),
>>> helped reduce indentation and typing by removing the need to nest a
>>> try / except inside a try / finally.
>> Isn't it essentially the same suggestion as Alan Johnson's last week?
> Hmm, I hadn't read that thread. "try with" looked sufficiently ugly
> that I wasn't interested :-)
> But anyway it seems that discussion was conflating a lot of things.
As things usually end up on python-ideas. But the original proposal was
pretty much the same as yours, with a slightly different syntax (his
> I would only like a shortcut for a "try ... except" around a "with",
> without any other sophistication. Seems "with" is essentially a
> "try ... finally", there seems to be a syntactic precedent already.
> And, yes, I actually want to catch exceptions raised *inside* the
> "with" block, not just by the "with" statement itself. The database
> example above makes it clear: I want the "with" to issue a ROLLBACK on
> an exception inside the block, *and* I want to handle the exception in
> a specific way after the ROLLBACK.
More information about the Python-ideas