在某些情况下,我想打印调试样式的输出,如下所示:
# module test.py
def f()
a = 5
b = 8
debug(a, b) # line 18我希望debug函数打印以下内容:
debug info at test.py: 18
function f
a = 5
b = 8我认为这应该可以通过使用inspect模块来定位堆栈框架,然后找到适当的行,查找该行中的源代码,从那里获得参数的名称。函数名可以通过上移一个栈帧来获得。(参数的值很容易获得:它们直接传递给函数debug。)
我在正确的轨道上吗?有什么我可以参考的食谱吗?
发布于 2012-03-30 14:43:44
您可以按照以下方式做一些事情:
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()这将打印出来:
test.py:12 f()
a = 5
b = 8发布于 2012-03-30 14:46:55
发布于 2012-03-30 14:50:14
是的,你在正确的轨道上。您可能希望查看inspect.getargspec,它将返回传递给函数的参数、变量、关键字和默认值的命名元组。
import inspect
def f():
a = 5
b = 8
debug(a, b)
def debug(a, b):
print inspect.getargspec(debug)
f()https://stackoverflow.com/questions/9938082
复制相似问题