debugging 在Python中获取另一个函数内部的调用函数名?[duplicate]

q9yhzks0  于 2022-12-19  发布在  Python
关注(0)|答案(5)|浏览(148)
    • 此问题在此处已有答案**:

How to get the caller's method name in the called method?(11个答案)
三年前关闭了。
如果您有2个功能,如:

def A
def B

A呼叫B,你能知道是谁在呼叫B吗?

def A () :
    B ()

def B () :
    this.caller.name
wlp8pajw

wlp8pajw1#

你可以使用inspect模块来获取你想要的信息,它的stack方法返回一个帧记录列表。

  • 对于Python 2,每个帧记录都是一个列表,每个记录中的第三个元素是调用者名称,你需要的是:
>>> import inspect
>>> def f():
...     print inspect.stack()[1][3]
...
>>> def g():
...     f()
...
>>> g()
g
  • 对于Python 3.5+,每个帧记录都是一个命名元组,因此需要替换
print inspect.stack()[1][3]

print(inspect.stack()[1].function)

上面的代码。

umuewwlo

umuewwlo2#

使用sysinspect模块有两种方式:

  • sys._getframe(1).f_code.co_name
  • inspect.stack()[1][3]

stack()可读性较差,并且依赖于实现,因为它调用sys._getframe(),请参见inspect.py摘录:

def stack(context=1):
    """Return a list of records for the stack above the caller's frame."""
    return getouterframes(sys._getframe(1), context)
bt1cpqcv

bt1cpqcv3#

  • 注(2018年6月):今天,我可能会使用inspect模块,请参阅其他答案 *

sys._getframe(1).f_code.co_name,如下例所示:

>>> def foo():
...  global x
...  x = sys._getframe(1)
...
>>> def y(): foo()
...
>>> y()
>>> x.f_code.co_name
'y'
>>>

重要提示:从_getframe方法名称(嘿,它以下划线开头)可以明显看出,它不是一个不应该盲目依赖的API方法。

oalqel3c

oalqel3c4#

这对我很有效!:D

>>> def a():
...     import sys
...     print sys._getframe(1).f_code.co_name
...
>>> def b():
...     a()
...
...
>>> b()
b
>>>
clj7thdc

clj7thdc5#

您可以使用日志记录模块并在BaseConfig()中指定%(funcName)s选项

import logging
logging.basicConfig(
    filename='/tmp/test.log', 
    level=logging.DEBUG, 
    format='%(asctime)s | %(levelname)s | %(funcName)s |%(message)s',
)

def A():
    logging.info('info')

相关问题