Python - 获取调用我的行的源代码
Python - 获取调用我的行的源代码
在一个函数中使用python inspect模块时,我想获得调用该函数的源代码行。
所以在以下情况下:
def fct1(): # Retrieve the line that called me and extract 'a' return an object containing name='a' a = fct1()
我想在fct1中检索字符串\"a = fct1()\"。
到目前为止,我能做的只是用以下方式检索整个模块的代码:
code = inspect.getsource(sys._getframe().f_back)
请注意,fct1()可以在主模块中被多次调用。
最终,我想要的是检索变量名\"a\",如果我可以在fct1()中得到s = \"a = fct1()\",这很容易:
a_name = s.split("=")[0].strip()
admin 更改状态以发布 2023年5月22日
一个非常愚蠢的解决方法是捕获堆栈跟踪并获取第二行:
import traceback def fct1(): stack = traceback.extract_stack(limit=2) print(traceback.format_list(stack)[0].split('\n')[1].strip()) # prints "a = fct1()" return None a = fct1()
@jtlz2 在装饰器中要求它
import traceback def add_caller(func): def wrapper(*args, **kwargs): stack = traceback.extract_stack(limit=2) func(*args, caller=traceback.format_list(stack)[0].split('\n')[1].strip(), **kwargs) return wrapper @add_caller def fct1(caller): print(caller) fct1()
它确实有效