1

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

4

1 回答 1

0

exec声明文件in您可以通过在表达式后添加来指定上下文:

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

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

全局变量不受这种限制;您可以随意添加到全局命名空间;在这种情况下,请忽略该, frame.f_locals部分。

于 2013-01-27T14:27:55.907 回答