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

Ada*_*dam 14 python stack-trace traceback

使用:

traceback.print_stack()
Run Code Online (Sandbox Code Playgroud)

我可以得到:

  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()
Run Code Online (Sandbox Code Playgroud)

我有办法得到这样的东西:

  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()
Run Code Online (Sandbox Code Playgroud)

我只是想看看哪些参数传递给函数.

Sve*_*ach 12

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

 inspect.getargvalues(traceback.tb_frame)
Run Code Online (Sandbox Code Playgroud)

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


Tim*_*her 9

您可以使用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)
Run Code Online (Sandbox Code Playgroud)