Get parent function

后端 未结 4 408
不思量自难忘°
不思量自难忘° 2021-01-02 00:39

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         


        
相关标签:
4条回答
  • 2021-01-02 01:03

    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()
    
    0 讨论(0)
  • 2021-01-02 01:05
    import inspect
    
    def first():
        return second()
    
    def second():
        return inspect.getouterframes( inspect.currentframe() )[1]
    
    first()[3] # 'first'
    
    0 讨论(0)
  • 2021-01-02 01:08

    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]
    
    0 讨论(0)
  • 2021-01-02 01:09

    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.

    0 讨论(0)
提交回复
热议问题