getting name of passed reference
Gabriel Genellina
gagsl-py2 at yahoo.com.ar
Tue Dec 29 02:29:02 EST 2009
En Tue, 29 Dec 2009 00:28:32 -0300, Joel Davis <callmeclaudius at gmail.com>
escribió:
> On Dec 28, 9:37 pm, Joel Davis <callmeclaud... at gmail.com> wrote:
> my thanks go out to Emile and Mr Hanson for their responses, I think
> I've found the solution, much shorter as well:
>
> > #!/usr/bin/python
>
> > import traceback
>
> > def testing ( varPassed ):
> > print traceback.extract_stack()[0][3]
>
> > testing("123")
>
> and it seems the traceback module in general seems to have a lot of
> history to it. This project is for CPython so compatibility with
> Jython, Iron Python, et al isn't really that important right now. So
> as far as functionality and compatibility I think I'm set as long as
> traceback.extract_stack is 3.0 safe.
Test with this:
def f(): return g()
def g(): return h()
def h(): testing("123")
f()
You probably want traceback.extract_stack()[-2][3] instead.
Note that your solution solves a different problem: you asked "the name of
the passed object" and testing() above prints "the source line of the
previous stack frame". This method may be good enough for you, but you
should be aware of its limitations:
- The source code (.py file) of the module containing the calling function
must be present (a .pyc file is not enough).
- It must be a plain text file in the filesystem, directly reachable in a
directory along sys.path (it may not be contained in a .zip file, an .egg,
or use any other kind of import mechanism).
- The source retrieval may fail if your program changes the current
directory
- If the calling function is not actually inside a module, you can't
retrieve its source (e.g. when using exec/eval, or from inside the
interactive interpreter).
- Only the last line of the function invocation is returned; you miss all
its previous lines and/or arguments.
I'm sure other limitations apply too -- don't rely on this technique for
anything critical.
--
Gabriel Genellina
More information about the Python-list
mailing list