2013-02-13 73 views
2

我正在使用trace模塊追蹤代碼執行的項目。
當我撥打trace.Trace(args).run(stuff)時,stuff必須是代碼對象或字符串。trace with functools.partial

現在,我正在構建函數,我將調用functools.partial調用。這部分完全按照我需要的方式工作。

但是,當我到達跟蹤部分時,我無法使用functools.partial對象執行跟蹤。我不能使用myFuncToolsPartialObject.func.func_name(args),因爲我不能保證函數將被導入本地作用域。我可以通過調用導入來解決此問題,但現在寧可不要,我們稱之爲個人偏好。

有沒有一種方法可以將functools.partial對象變成代碼對象以便正確調用跟蹤?

我知道我可以要求myFuncToolsPartialObject.func.func_code,但我不知道如何調用它所需參數

回答

1

事實證明,trace已經內建了對這個用例的支持。 trace.Trace().runfunc(funcObject, *args)完全是這樣。

the docs

runfunc(func, *args, **kwds) 
Call func with the given arguments under control of the Trace object with the current tracing parameters. 
0

工作的呢?

trace.Trace().run((lambda :partial_stuff(args)).func_code) 
+0

我得到'類型錯誤:傳遞給exec可能不包含免費variables'代碼對象。但除此之外,我希望我能想到這個解決方案 – inspectorG4dget 2013-02-13 03:55:55