[Python-ideas] Standard way to get caller name and easy call stack access

Sven Marnach sven at marnach.net
Tue Mar 27 18:32:00 CEST 2012


Nick Coghlan schrieb am Tue, 27. Mar 2012, um 23:00:49 +1000:
> There are other potentially beneficial use cases for the new
> qualname attribute as well (e.g. the suggestion of using it in
> tracebacks instead of __name__ is a good idea)

I think that including the qualified name in tracebacks would indeed
be an worthwhile improvement, and it would be nice if this could be
included in 3.3.  It would put __qualname__ to an excellent use.

There are some open questions to adding a 'co_qualname' attribute.

1. What should be done for code objects that don't correspond to
   something having a __qualname__, like list comprehensions?  There
   are two options: Using "function_name.<locals>.<listcomp>", similar
   to lambda functions, or simply using 'None' or the same string as
   'co_name' to avoid the overhead of computing a qualified name for
   every code object.

2. What about module names and PEP 395 qualified module names?  One
   option would of course be to add both of them to the code object as
   well.  Steven D'Aprano suggested giving full access to the function
   objects instead.  The function object cannot be referenced in the
   code object, though, because this would create reference cycles in
   CPython.  It *can* be referenced in the frame object (and this way,
   the change would only affect implementations having stack frames in
   the first place).  This would only partially solve the use case of
   including qualified names in the traceback, since it only covers
   functions, not modules and classes.  (For classes, we can't do
   something like this anyway, since the class object does not yet
   exist while the class body code executes.)

What would have to be done to push this proposal?

Cheers,
    Sven



More information about the Python-ideas mailing list