Eval the caller within a method?

Olivier Dagenais olivierS.dagenaisP at canadaA.comM
Sat Oct 21 12:05:58 EDT 2000


You don't need to raise an exception to look at the current stack:  the
traceback module has a function called extract_stack, which returns a list
you can inspect and manipulate.

--
----------------------------------------------------------------------
Olivier A. Dagenais - Software Architect and Developer
"Someone called 'Type your name here' is impersonating me on the
internet and is posting exactly the same things I am posting!"


"Jan Dries" <jdries at mail.com> wrote in message
news:mailman.972136977.15647.python-list at python.org...
>
>
> Franz GEIGER wrote:
> >
> > I wonder if in Python there is a possibility to evaluate the method
which
> > called a method within that method like it is in Perl.
> >
> > Any ideas?
>
> Given you run the following python program (saved in file loginfo.py)
>
>     from sys import exc_info
>
>     def caller_info():
>         try:
>             raise StandardError
>         except StandardError:
>             caller = exc_info()[2].tb_frame.f_back.f_back.f_code
>             return
> (caller.co_name,caller.co_filename,caller.co_firstlineno)
>
>     def log_info(msg):
>         print "Message '%s' from function %s in file %s at line %s " %
> ((msg,) + caller_info())
>
>     def my_function():
>         log_info("some diagnostics")
>
>     my_function()
>
> the output is:
>
> "Message 'some diagnostics' from function my_function in file loginfo.py
> at line 13"
>
> which I believe is what you were looking for.
> The trick is in the traceback object you can obtain once you get an
> exception. That contains the current stack frame (where the exception
> occured). Each stack frame has, among other things, a ref to the
> previous (the caller) frame (named f_back) and a ref to a code object
> named f_code. The latter has various members with info about the
> function.
>
> Regards,
> Jan
>





More information about the Python-list mailing list