Is there a way to find what function called the current function? So for example:
def first():
second()
def second():
# print out here what function
These work well for quickly adding minimal where-am-I debugging aids when you don't want to import yet another module. (CPython only, for debugging only.)
def LINE( back = 0 ):
return sys._getframe( back + 1 ).f_lineno
def FILE( back = 0 ):
return sys._getframe( back + 1 ).f_code.co_filename
def FUNC( back = 0):
return sys._getframe( back + 1 ).f_code.co_name
def WHERE( back = 0 ):
frame = sys._getframe( back + 1 )
return "%s/%s %s()" % ( os.path.basename( frame.f_code.co_filename ),
frame.f_lineno, frame.f_code.co_name )
Example:
import sys, os # these you almost always have...
def WHERE( back = 0 ):
frame = sys._getframe( back + 1 )
return "%s/%s %s()" % ( os.path.basename( frame.f_code.co_filename ),
frame.f_lineno, frame.f_code.co_name )
def first():
second()
def second():
print WHERE()
print WHERE(1)
first()
Output:
$ python fs.py
fs.py/12 second()
fs.py/9 first()
import inspect
def first():
return second()
def second():
return inspect.getouterframes( inspect.currentframe() )[1]
first()[3] # 'first'
You can use the traceback module's extract_stack function.
import traceback
def first():
second()
def second():
print traceback.extract_stack(limit=2)[-2][2]
The inspect module allows for many forms of introspection including this one, but note that it's only recommended to use such information for purposes such as debugging, not as part of your production code's functionality. See the docs for all details.