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