有没有办法找到称为当前功能的函数?例如:获取父功能
def first():
second()
def second():
# print out here what function called this one
任何想法?
有没有办法找到称为当前功能的函数?例如:获取父功能
def first():
second()
def second():
# print out here what function called this one
任何想法?
import inspect
def first():
return second()
def second():
return inspect.getouterframes(inspect.currentframe())[1]
first()[3] # 'first'
您可以使用回溯模块的extract_stack函数。
import traceback
def first():
second()
def second():
print traceback.extract_stack(limit=2)[-2][2]
这些对于在不想导入另一个模块时快速添加最少的调试帮助很有效。 (仅CPython的,仅用于调试。)
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)
实施例:
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是好的,恕我直言。 – 2010-03-27 19:18:19