Python 获取父函数

Python 获取父函数,python,Python,有没有办法找到调用当前函数的函数?例如: def first(): second() def second(): # print out here what function called this one 有什么想法吗?您可以使用回溯模块的功能 import traceback def first(): second() def second(): print traceback.extract_stack(limit=2)[-2][2] 该模块允许多种

有没有办法找到调用当前函数的函数?例如:

def first():
    second()

def second():
    # print out here what function called this one

有什么想法吗?

您可以使用回溯模块的功能

import traceback
def first():
    second()

def second():
    print traceback.extract_stack(limit=2)[-2][2]

该模块允许多种形式的自省,包括本模块,但请注意,建议仅将此类信息用于调试等目的,而不是作为生产代码功能的一部分。有关所有详细信息,请参阅。

当您不想再导入另一个模块时,这些工具可以很好地快速添加最小的where-am-I调试帮助。(仅限CPython,仅用于调试。)

import inspect

def first():
    return second()

def second():
    return inspect.getouterframes( inspect.currentframe() )[1]

first()[3] # 'first'
例如:

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()
输出:

$ python fs.py
fs.py/12 second()
fs.py/9 first()

@MikeG:想要在产品发布中获得这些信息是不好的,是的。使用它来调试和理解一大块Python很好,IMHO。在调用之前有没有办法检查它是否足够深,当我调用
WHERE(1)
从顶部父函数时,我得到以下错误:
ValueError:调用堆栈不够深
谢谢,我把它放在一个循环中,并成功地在我的一个脚本中检索到一个有问题的函数!这里有一个要点:
$ python fs.py
fs.py/12 second()
fs.py/9 first()