如何获取传递给栈中函数的参数值?


问题内容

使用:

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

我只想看看传递给函数的参数。


问题答案:

您可能可以通过使用inspect.getargvalues()和访问属于您的回溯的堆栈框架来装配一些东西:

 inspect.getargvalues(traceback.tb_frame)

您必须做一些工作才能完全按照需要获取输出。上面的行仅适用于最内层的框架,因此您必须走到堆栈上方并访问每个框架所需的信息。
inspect.getouterframes()可能会派上用场。