[Haskell-cafe] Control.Exception.bracket is broken(?)

Mike Meyer mwm at mired.org
Sun Jul 6 21:45:49 UTC 2014

On Sun, Jul 6, 2014 at 9:16 AM, Yuras Shumovich <shumovichy at gmail.com>

> On Sun, 2014-07-06 at 08:37 -0500, Mike Meyer wrote:
> > You left off what I think is the best behavior, from Python 3:
> >
> > 4) Throw the exception for the release action, chaining the original
> > exception to it. The default exception handler reports the them both.
> You mean the "__context__" attribute of the exception? Java also allows
> one to get the suppressed exception via "Throwable.getSuppressed"
> method. But python3 suppresses the original exception, while java does
> the opposite, so I'm ok to count it as a separate option (#4). Thanks.
> >
> > > I prefer #2 because suppressing exception is a really bad idea. What is
> > > your choice?
> >
> > #4.
> Is it common for python3 code to be prepared to handle __context__? I
> guess most developers just ignore it. So probably #1 is better?

There are two types of exception handles in most Python applications. Ones
that handle specific exceptions should catch as few exceptions as possible.
These are narrowed to include as little code as possible, and only catch
the exceptions they know how to deal with. They normally won't deal with
__context__ unless they expect to catch such exceptions.

The other type is a catchall handler that usually tries to report the
exception and return the application to a known state. It should handle

Personally, I think that #2 is a really bad option, because it makes it
impossible to properly write exception handlers of the second type. While I
understand the urge - my usual such handler for long-running programs is to
exec itself to create a clean instance -  you should still make that option
available to the programmer.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20140706/96d0ade8/attachment.html>

More information about the Haskell-Cafe mailing list