如何获取传递给函数的栈上的参数值?
使用:
traceback.print_stack()
我可以得到:
File "x.py", line 20, in <module>
y(x)
File "x.py", line 11, in y
fun(x)
File "x.py", line 8, in fun
traceback.print_stack()
有没有什么办法可以得到像这样的东西:
File "x.py", line 20, in <module>
y(x) WHERE x == 1
File "x.py", line 11, in y
fun(x) WHERE x == 'str'
File "x.py", line 8, in fun
traceback.print_stack()
我只是想看看传递给函数的参数是什么。
2 个回答
10
你可以使用 inspect 这个模块来实现这个功能:
>>> import inspect
... def fn(x):
... try:
... print(1/0)
... except ZeroDivisionError as e:
... frames = inspect.trace()
... argvalues = inspect.getargvalues(frames[0][0])
... print("Argvalues: ", inspect.formatargvalues(*argvalues))
>>> fn(12)
Argvalues: (x=12)
14
你可以通过使用 inspect.getargvalues()
来实现一些功能,具体来说就是访问与你的错误追踪信息相关的堆栈帧。
inspect.getargvalues(traceback.tb_frame)
不过,你需要花一些时间来调整输出,确保它符合你的需求。上面提到的代码只适用于最内层的堆栈帧,所以你需要逐层向上遍历堆栈,获取每一层所需的信息。此时,inspect.getouterframes()
可能会对你有所帮助。