2015-09-16 73 views
7

如何檢查sys.settrace調用中的函數參數值?看起來,我有可能輸出幾乎所有的東西(行,文件名,堆棧跟蹤,返回值等),除了參數。有沒有一種解決方法可以讓我跟蹤函數參數值?python中的sys.settrace打印函數參數

回答

9

您可以使用代碼對象和框架對象的組合。

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", "!") 

實現關鍵的東西是

  1. ,我們可以看到在幀f_locals所有局部變量。
  2. 我們可以從f_code.co_varnames中提取參數列表中變量的名稱。
+0

如何打印每個跟蹤函數的返回值? – river

+0

要捕獲返回值,請檢查msg =='return',如[docs](https://docs.python.org/3.5/library/sys.html#sys.settrace)所示。返回的值將在'arg'中。 – marc