我正在追踪一个名为tracedFn()
的函数:
sys.settrace(traceit)
tracedFn()
sys.settrace(None)
tracedFn
:
def tracedFn():
foo = False
在traceit
函数中,我想使用exec语句在tracedFn()中执行带变量的语句,如下所示:
def traceit(frame, event, trace_arg):
if event == 'line':
exec 'foo = True'
print frame.f_locals
#foo still False
return traceit
但是当我打印frame.f_locals时,exec不会改变foo变量吗?
答案 0 :(得分:0)
见exec
statement documentation;您可以通过在表达式后添加in
来指定上下文:
exec 'foo = True' in frame.f_globals, frame.f_locals
请注意,您无法将新的本地人添加到某个功能中。您只能更改现有的局部变量(在编译时已在函数中声明的变量)。因此,除非在您正在跟踪的函数中定义foo
,否则您不能将 foo
添加到该函数的局部变量。
全局变量不限于此;你可以随意添加到globals命名空间;在这种情况下,请离开, frame.f_locals
部分。