[Python-Dev] Reference cycles in Exception.__traceback__

Yury Selivanov yselivanov.ml at gmail.com
Wed Mar 5 23:31:01 CET 2014


On 2014-03-05, 4:54 PM, Nick Coghlan wrote:
> On 6 Mar 2014 02:43, "Antoine Pitrou" <solipsis at pitrou.net> wrote:
>> Le 05/03/2014 17:37, Victor Stinner a écrit :
>>
>>> Python 3.4 introduced frame.clear(), but frame.clear() raises an
>>> RuntimeError if the frame is still running. And it doesn't break all
>>> reference cycles.
>>>
>>> An obvious workaround is to store the traceback as text, but this
>>> operation is "expensive" especially if the traceback is only needed in
>>> rare cases.
>>
>> Another "obvious" workaround is to call frame.clear() from the parent
> function (i.e. have a dedicated wrapping layer).
>
> Guido had a fix in mind - splitting traceback formatting into two pieces.
> The first would convert a traceback to a sequence of named tuples, the
> second would do the actual string formatting.

I don't like the idea of using tuples instead of tracebacks
in 'exception.__traceback__'.  Lots of introspection and logging
tools except to find tracebacks in exceptions, and do custom
formatting or submitting data to remote servers for further
analysis (sometimes with values of local variables in frames).
If asyncio starts stripping exception.__traceback__ and using
namedtuples, it will make it harder to write/integrate such
tools.

Yury


More information about the Python-Dev mailing list