[Python-3000] self-contained exceptions

Phillip J. Eby pje at telecommunity.com
Thu Jan 4 05:04:01 CET 2007


At 07:38 PM 1/3/2007 -0800, Guido van Rossum wrote:
>On 1/3/07, Ka-Ping Yee <python at zesty.ca> wrote:
> > On Wed, 3 Jan 2007, Adam Olsen wrote:
> > > That can be solved by moving the weakref to the stack frame -> exc
> > > part, and only turning it from a strong reference into a weak
> > > reference when the function exits.  When debugging via the raised
> > > exception, the chain of __context__ references would keep it alive.
> >
> > That seems like a reasonable approach to me.  The implementation
> > might be tricky, but the behaviour sounds correct.
>
>Which reference are you exactly turning into a weak ref? The hidden
>reference in the frame's f_exc_traceback? Or the variable 'err' in
>
>   except Exception, err: ...
>
>? The former goes away anyway so I'm not sure that this helps. And the
>latter seems fraught with peril; how do we even know which variables
>to treat this way? And why isn't it just as good to simply *delete*
>all locals that ever occurred in such a position in an except clause?

Or perhaps translate blocks of the form:

     except ExcType, e:
         # body

to:

     except ExcType, e:
         try:
             # body
         finally:
             del e

This won't stop you from creating a cycle explicitly, of course, but it 
would ensure that the simple cases would be cycle-free.



More information about the Python-3000 mailing list