4

我有一个包含函数的字符串变量。该函数如下所示:

def program():
    x[0] = y[1]
    z[0] = x[0]
    out = z[0]

这是在一个方法中:

def runExec(self, stringCode):
    x = [1,2,3,4]
    y = [5,6,7,8]
    z = [6,7,8,9]
    exec stringCode
    return out

我收到一个 NameError,似乎无法从 stringCode exec 访问 x、y 和 z?

如何使这些变量可访问,我是否必须以某种方式传递它们?

谢谢

4

3 回答 3

4

假设您有充分的理由使用exec,这是您应该仔细检查的假设。

您需要为exec函数提供全局和本地范围。此外,“程序”字符串需要实际运行,而不是仅仅定义一个函数。这将起作用:

prog = """
x[0] = y[1]
z[0] = x[0]
out = z[0]
"""

def runExec(stringCode):
    x = [1,2,3,4]
    y = [5,6,7,8]
    z = [6,7,8,9]
    exec(stringCode, globals(), locals())
    return out

print runExec(prog)
于 2012-05-11T12:28:17.197 回答
1

为什么需要使用exec?以下代码应该以相同的方式工作,只是没有exec

def program(x, y, z):
    x[0] = y[1]
    z[0] = x[0]
    out = z[0]
    return out

def runExec(self, func):
    x = [1,2,3,4]
    y = [5,6,7,8]
    z = [6,7,8,9]
    out = func(x, y, z)
    return out

self.runExec(program)
于 2012-05-11T12:17:23.007 回答
1

你可以让它们全球化。

global x,y,z
def runExec(self, func):
    x = [1,2,3,4]
    y = [5,6,7,8]
    z = [6,7,8,9]
    out = func(x, y, z)
    return out
于 2012-05-11T12:18:19.590 回答