[Python-ideas] with-except-finally blocks
MRAB
python at mrabarnett.plus.com
Thu Apr 16 18:50:26 CEST 2015
On 2015-04-16 17:38, Steven D'Aprano wrote:
> On Thu, Apr 16, 2015 at 08:35:14AM -0700, Ethan Furman wrote:
>
>> > No more than any other block of code. There is nothing special about
>> > with blocks that go with exception handling [...]
>>
>> I have to disagree: 'with' blocks are exactly a condensed try/finally, with the
>> added capability of being able to suppress exceptions -- this makes them very
>> special with respect to exception handling.
>
> Yes, yes, that's a given that with statements encapsulate a finally
> clause. But that is missing the point. The proposal is not to add a
> finally clause to context managers, because they already have one.
> The proposal is to allow special syntax for the situation where you want
> a separate and independent finally.
>
> with spam():
> try:
> blockA
> except Error:
> blockB
> finally:
> blockC
>
> The finally: blockC has nothing to do with the context manager's
> __exit__ method. We might as well be talking about this:
>
> while spam():
> try:
> blockA
> except Error:
> blockB
> finally:
> blockC
>
> giving us syntactic sugar:
>
> # not a serious proposal
> while spam():
> blockA
> except Error:
> blockB
> finally:
> blockC
>
If I saw that I'd expect it to mean:
try:
while spam():
blockA
except Error:
blockB
finally:
blockC
>
> In fact, if I were a betting man, I'd venture a small wager that there
> are more while- or for-loops with try blocks inside them than with
> blocks. After all, the whole purpose of with statements is to avoid
> needing to write a try...finally!
>
More information about the Python-ideas
mailing list