您可以将此调试宏从C ++转换为python吗?


问题内容

在C ++中进行开发时,我使用这个非常有用的宏:

#define DD(a) std::cout << #a " = [ " << a << " ]" << std::endl;std::cout.flush();

您能帮我在python中实现相同的想法吗?我不知道如何#a用python函数实现…


问题答案:

您可以检查堆栈跟踪并“解析”它。由于您知道函数的名称(在本例中为dd),因此找到调用并提取变量的名称变得相当容易。

    import inspect
    import re

    def dd(value):
        calling_frame_record = inspect.stack()[1]
        frame = inspect.getframeinfo(calling_frame_record[0])
        m = re.search( "dd\((.+)\)", frame.code_context[0])
        if m:
            print "{0} = {1}".format(m.group(1), value)

    def test():
        a = 4
        dd(a)

    test()

输出量

a = 4