how to get a function object from a frame object
I have written a trace function and it recieves the current frame object from the interpreter. I want to know whether the event pertains to a class or method or function. I can only get a code object from this frame object but not a function object or class object. Please post if any body have ideas. Vijay -- http://mail.python.org/mailman/listinfo/python-list
Re: How to get a Function object from a Frame object
Greg Ewing wrote: Steven Bethard wrote: Gigi wrote: I need access to a function object that corresponds to a frame object in a certain case from inside the function. Can you look up the code's co_name in the previous frame's locals? You probably also need to check the previous frame's globals... And there are probably some cases where this code still wouldn't work... Note that in general it's impossible to tell exactly which function object was involved, since there could be more than one function object sharing the same code object, and the frame only references the code object. I can get the co_name and everything that's available from the code object. However, I can't get to the actual function object. I need the function object to get a custom function attribute that was injected earlier as context. I didn't know that code objects could be shared. I guess it really makes the whole thing impossible, unless the code object kept a list of all the functions that share it. Thanks, anyway. I found a different solution. -- http://mail.python.org/mailman/listinfo/python-list
Re: How to get a Function object from a Frame object
Steven Bethard wrote: Gigi wrote: I need access to a function object that corresponds to a frame object in a certain case from inside the function. Can you look up the code's co_name in the previous frame's locals? You probably also need to check the previous frame's globals... And there are probably some cases where this code still wouldn't work... Note that in general it's impossible to tell exactly which function object was involved, since there could be more than one function object sharing the same code object, and the frame only references the code object. -- Greg Ewing, Computer Science Dept, University of Canterbury, Christchurch, New Zealand http://www.cosc.canterbury.ac.nz/~greg -- http://mail.python.org/mailman/listinfo/python-list
Re: How to get a Function object from a Frame object
Gigi wrote: I need access to a function object that corresponds to a frame object in a certain case from inside the function. I can get the frame object using: f = sys._getframe(0) But the resulting frame object doesn't contain the information I need. There is a lot of information in the code object (f.f_code), but not the actual function or method object. The inspect module doesn't help either it just provides nicer interface to the Frame object. Any ideas out there? Can you look up the code's co_name in the previous frame's locals? py> def getself(): ...frame = sys._getframe(1) ...return frame.f_back.f_locals[frame.f_code.co_name] ... py> def g(): ... def h(): ... return getself() ... return dict(g=getself(), h=h()) ... py> g() {'h': , 'g': } You probably also need to check the previous frame's globals... And there are probably some cases where this code still wouldn't work... STeVe -- http://mail.python.org/mailman/listinfo/python-list
How to get a Function object from a Frame object
Hi, I need access to a function object that corresponds to a frame object in a certain case from inside the function. I can get the frame object using: f = sys._getframe(0) But the resulting frame object doesn't contain the information I need. There is a lot of information in the code object (f.f_code), but not the actual function or method object. The inspect module doesn't help either it just provides nicer interface to the Frame object. Any ideas out there? Thanks, Gigi -- http://mail.python.org/mailman/listinfo/python-list