[Python-Dev] Reference cycles in Exception.traceback (original) (raw)

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