我正在从事一个使用 trace 的项目跟踪代码执行的模块。
当我调用 trace.Trace(args).run(stuff) 时,stuff 必须是代码对象或字符串。
目前,我正在构建我将通过调用 functools.partial 来调用的函数。这部分完全符合我的需要。
但是,当我到达跟踪部分时,我无法使用 functools.partial 对象执行跟踪。我不能使用 myFuncToolsPartialObject.func.func_name(args) 因为我不能保证函数会被导入本地范围。我可以通过调用导入来解决这个问题,但目前宁愿不调用(我们称之为个人偏好)。
有没有一种方法可以将 functools.partial 对象转换为代码对象以正确调用跟踪?
我知道我可以请求 myFuncToolsPartialObject.func.func_code,但我不知道如何根据所需参数调用它
请您参考如下方法:
事实证明,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.
