打印传递给函数的变量名称

max*_*max 5 python debugging introspection python-3.x

在某些情况下,我想打印调试样式的输出,如下所示:

# module test.py
def f()
  a = 5
  b = 8
  debug(a, b) # line 18
Run Code Online (Sandbox Code Playgroud)

我希望该debug函数打印以下内容:

debug info at test.py: 18
function f
a = 5
b = 8
Run Code Online (Sandbox Code Playgroud)

我认为应该可以通过使用inspect模块定位堆栈框架,然后查找相应的行,查找该行中的源代码,从那里获取参数的名称.可以通过向上移动一个堆栈帧来获得函数名称.(参数的值很容易获得:它们直接传递给函数debug.)

我是在正确的轨道上吗?有没有我可以参考的食谱?

NPE*_*NPE 3

您可以按照以下方式做一些事情:

import inspect

def debug(**kwargs):
  st = inspect.stack()[1]
  print '%s:%d %s()' % (st[1], st[2], st[3])
  for k, v in kwargs.items():
    print '%s = %s' % (k, v)

def f():
  a = 5
  b = 8
  debug(a=a, b=b) # line 12

f()
Run Code Online (Sandbox Code Playgroud)

这打印出:

test.py:12 f()
a = 5
b = 8
Run Code Online (Sandbox Code Playgroud)