Как получить значение аргументов, передаваемых функциям в стеке? - PullRequest
14 голосов
/ 19 мая 2011

Используя:

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 ]

12 голосов
/ 19 мая 2011

Вы, вероятно, можете что-то подстроить, используя inspect.getargvalues() и получив доступ к фрейму стека, принадлежащему вашей трассировке:

 inspect.getargvalues(traceback.tb_frame)

Вам нужно будет поработать, чтобы получитьвывод точно так, как нужно.Приведенная выше строка предназначена только для самого внутреннего кадра, поэтому вам придется пройтись по стеку и получить доступ к информации, необходимой для каждого кадра.inspect.getouterframes() может пригодиться.

9 голосов
/ 19 мая 2011

Для этого вы можете использовать модуль 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)
...