A "scopeguard" for Python
Robert Kern
robert.kern at gmail.com
Thu Mar 4 11:04:02 EST 2010
On 2010-03-04 09:48 AM, Alf P. Steinbach wrote:
> * Jean-Michel Pichavant:
>> Alf P. Steinbach wrote:
>>>> From your post, the scope guard technique is used "to ensure some
>>>> desired cleanup at the end of a scope, even when the scope is exited
>>>> via an exception." This is precisely what the try: finally: syntax
>>>> is for.
>>>
>>> You'd have to nest it. That's ugly. And more importantly, now two
>>> people in this thread (namely you and Mike) have demonstrated that
>>> they do not grok the try functionality and manage to write incorrect
>>> code, even arguing that it's correct when informed that it's not, so
>>> it's a pretty fragile construct, like goto.
>>
>> You want to execute some cleanup when things go wrong, use try except.
>> You want to do it when things go right, use try else. You want to
>> cleanup no matter what happen, use try finally.
>>
>> There is no need of any Cleanup class, except for some technical
>> alternative concern.
>
> Have you considered that your argument applies to the "with" construct?
>
> You have probably not realized that.
>
> But let me force it on you: when would you use "with"?
When there is a specific context manager that removes the need for boilerplate.
> Check if that case is covered by your argument above.
>
> Now that you've been told about the "with" angle, don't you think it's a
> kind of weakness in your argument that it calls for removing "with" from
> the language?
No, it only argues that "with Cleanup():" is supernumerary.
--
Robert Kern
"I have come to believe that the whole world is an enigma, a harmless enigma
that is made terrible by our own mad attempt to interpret it as though it had
an underlying truth."
-- Umberto Eco
More information about the Python-list
mailing list