A "scopeguard" for Python

Robert Kern robert.kern at gmail.com
Thu Mar 4 17:04:02 CET 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