[Python-Dev] PEP 344 (was: with_traceback)

Guido van Rossum guido at python.org
Sat Mar 3 02:21:04 CET 2007


On 3/2/07, Andrew Dalke <dalke at dalkescientific.com> wrote:
> On 3/2/07, Guido van Rossum <guido at python.org> wrote:
> > So, despite the existence of libraries that pre-create exceptions, how
> > bad would it really be if we declared that use unsafe? It wouldn't be
> > hard to add some kind of boobytrap that goes off when pre-created
> > exceptions are raised multiple times. If this had always been the
> > semantics I'm sure nobody would have complained and I doubt that it
> > would have been a common pitfall either (since if it doesn't work,
> > there's no bad code abusing it, and so there are no bad examples that
> > newbies could unwittingly emulate).
>
> Here's code from os._execvpe which reraises an exception
> instance which was created earlier
>
>     saved_exc = None
>     saved_tb = None
>     for dir in PATH:
>         fullname = path.join(dir, file)
>         try:
>             func(fullname, *argrest)
>         except error, e:
>             tb = sys.exc_info()[2]
>             if (e.errno != ENOENT and e.errno != ENOTDIR
>                 and saved_exc is None):
>                 saved_exc = e
>                 saved_tb = tb
>     if saved_exc:
>         raise error, saved_exc, saved_tb
>     raise error, e, tb
>
> Would the boobytrap go off in this case?  I think it would,
> because a "saved_exc" is raised twice.

It shouldn't. This is a requirement for the boobytrap (which is
vaporware as yet :-). Perhaps we could allow reraising whenever the
existing traceback chain contains a reference to a frame that is an
ancestor of (or equal to) the newly raising frame?

-- 
--Guido van Rossum (home page: http://www.python.org/~guido/)


More information about the Python-Dev mailing list