7
如何检查sys.settrace调用中的函数参数值?看起来,我有可能输出几乎所有的东西(行,文件名,堆栈跟踪,返回值等),除了参数。有没有一种解决方法可以让我跟踪函数参数值?python中的sys.settrace打印函数参数
如何检查sys.settrace调用中的函数参数值?看起来,我有可能输出几乎所有的东西(行,文件名,堆栈跟踪,返回值等),除了参数。有没有一种解决方法可以让我跟踪函数参数值?python中的sys.settrace打印函数参数
您可以使用代码对象和框架对象的组合。
在Python Data-Model Reference中查看这些说明。
import sys
def fn(frame, msg, arg):
if msg != 'call': return
# Filter as appropriate
if frame.f_code.co_filename.startswith("/usr"): return
print("Called", frame.f_code.co_name)
for i in range(frame.f_code.co_argcount):
name = frame.f_code.co_varnames[i]
print(" Argument", name, "is", frame.f_locals[name])
sys.settrace(fn)
def hai(a, b, c):
print(a, b, c)
hai("Hallo", "Welt", "!")
实现关键的东西是
f_locals
所有局部变量。f_code.co_varnames
中提取参数列表中变量的名称。
如何打印每个跟踪函数的返回值? – river
要捕获返回值,请检查msg =='return',如[docs](https://docs.python.org/3.5/library/sys.html#sys.settrace)所示。返回的值将在'arg'中。 – marc