[Python-Dev] Asynchronous use of Traceback objects

Michael Hudson mwh at python.net
Sun Sep 4 12:39:38 CEST 2005


Christopher Armstrong <radeex at gmail.com> writes:

> I had the idea to create a fake Traceback object in Python that
> doesn't hold references to any frame objects, but is still able to be
> passed to 'raise' and formatted as tracebacks are, etc. Unfortunately,
> raise does a type check on its third argument and, besides, it seems
> the traceback formatting functions are very reliant on the internal
> structure of traceback objects, so that didn't work.

An option you may not have considered is to ditch the C code that
formats tracebacks and always use traceback.py (this has a few obvious
problems -- what do you do if traceback.py fails to import, what if
formatting the traceback raises an error -- but nothing too
horrendous, I think).

Less duplication and less C code are always good things (IMHO, at
least).

> It does seem that I would be able to construct a passable fake
> Traceback object from C code -- one that had references to fake
> frames. These fake objects would only remember the original line
> numbers, filenames and so forth so that traceback printing could still
> work. I can try implementing this soon, but I'd just like to make sure
> I'm on the right track. For example, perhaps a better idea would be to
> change the traceback-printing functions to use Python attribute lookup
> instead of internal structure lookup,

My suggestion above would obviously acheive this bit :)

> and then change raise to accept arbitrary Python objects as its
> third argument, as long as it matches the traceback interface. That
> would probably mean much more work, though.
>
> One concern is that I really don't like requiring C modules to use
> Twisted; all of the ones currently in there are optional.

Well, presumably this is optional too -- you only need it if you want
informative tracebacks...

> What's the likelihood of such a traceback-constructor getting its
> way into CPython if I do implement it?

I'd support more flexibility in this area.  I'm not sure what the best
approach is, though.

Cheers,
mwh

-- 
  I have *both* hands clapping, but I'm still not sure it's a sound.
  When I tried deciding if it were a sound while clapping only one
  hand, I fell off my chair.
                         -- Peter Hansen, Zen master, comp.lang.python


More information about the Python-Dev mailing list