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

Jim Jewett jimjjewett at gmail.com
Tue Mar 27 22:06:51 CEST 2012


On Tue, Mar 27, 2012 at 12:32 PM, Sven Marnach <sven at marnach.net> wrote:
>  ...  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.

Not if you use weakrefs.

And frankly, even without weakrefs, so what?  Functions are typically
immortal; waiting until gc to collect the oddballs isn't such a terrible cost.

>  It *can* be referenced in the frame object (and this way,
>   the change would only affect implementations having stack frames in
>   the first place).

If the name needs to be available, that affects all implementations, perhaps
even to the point of requiring them to create pseudo-frames, or causing
them to add the equivalent of an always-active trace function.  So yes,
there is cost.

>  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.)

Both the name and the namespace do, these may serve as a proxies
for most uses.  Or repurpose the super() magic.

-jJ



More information about the Python-ideas mailing list