Python - 获取调用我的行的源代码

13 浏览
0 Comments

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日
0
0 Comments

一个非常愚蠢的解决方法是捕获堆栈跟踪并获取第二行:

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()

它确实有效

0