Python exec NameError

时间:2012-05-11 12:14:39

标签: python scope

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

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?

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

由于

3 个答案:

答案 0 :(得分:2)

假设您有充分的理由使用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)

答案 1 :(得分: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)

答案 2 :(得分: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