python gets the method instance code that currently runs the function name


python gets the method instance code for the currently running function name

Abstract: in c/c++ to get the source name of the function, the method of getting the function name and the line number is very simple, s 6en__, s 7en__ and s 8en__ python has no such syntax, but can be obtained by some method. Here is an example.

Direct coding [see python core programming 4.4]

Gets the name of the function where the function is called

#author:[email protected]
def get_func_name():
  import sys
  try:
    raise Exception
  except:
    exc_info = sys.exc_info()                             # return   Exception type, exception, traceback object
    traceObj = exc_info[2]                               #traceback object
    frameObj = traceObj.tb_frame                         # To obtain frame Object of this function frame information
    #print frameObj.f_code.co_name,frameObj.f_lineno         # Please comment it out when you use it
    Upframe = frameObj.f_back                           # Gets the code snippet frame Information, the function that calls the function frame
    #print Upframe.f_code.co_name, Upframe.f_lineno          # Please comment it out when you use it
    return (Upframe.f_code.co_name, Upframe.f_lineno)[0]      # Get the name
 A method is called

Get file name path, function name, line number

------------------------------------------------------------------------------

def getCurRunPosInfo():
  import sys
  try:
    raise Exception
  except:
    exc_info = sys.exc_info()
    traceObj = exc_info[2]
    frameObj = traceObj.tb_frame
    #print frameObj.f_code.co_name,frameObj.f_lineno
    Upframe = frameObj.f_back
    #print Upframe.f_code.co_name, Upframe.f_lineno
    return (Upframe.f_code.co_filename, Upframe.f_code.co_name, Upframe.f_lineno)
# The test code
def test1():
  print getCurRunPosInfo()

def test2():
  print get_func_name()

 Output:
>>('demo.py', 'test1', 44)
>>test2

Thank you for reading, I hope to help you, thank you for your support of this site!