如何为exec语句指定另一个范围

时间:2013-01-27 14:25:16

标签: python

我正在追踪一个名为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变量吗?

1 个答案:

答案 0 :(得分:0)

exec statement documentation;您可以通过在表达式后添加in来指定上下文:

exec 'foo = True' in frame.f_globals, frame.f_locals

请注意,您无法新的本地人添加到某个功能中。您只能更改现有的局部变量(在编译时已在函数中声明的变量)。因此,除非在您正在跟踪的函数中定义foo,否则您不能 foo添加到该函数的局部变量。

全局变量不限于此;你可以随意添加到globals命名空间;在这种情况下,请离开, frame.f_locals部分。