Как получить значение аргументов, переданных функциям в стеке?
Использование:
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()
Я просто хочу посмотреть, какие аргументы были переданы функциям.
Ответы
Ответ 1
Возможно, вы можете что-то придумать, используя inspect.getargvalues()
и доступ к фрейму стека, принадлежащему вашей трассировке:
inspect.getargvalues(traceback.tb_frame)
Вам нужно будет сделать некоторую работу, чтобы получить результат точно так, как вам нужно. Вышеупомянутая строка предназначена только для самого внутреннего кадра, поэтому вам нужно будет подойти к стеку и получить доступ к информации, необходимой для каждого кадра. inspect.getouterframes()
может пригодиться.
Ответ 2
Вы можете использовать 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)