无法在python函数中找到用exec声明的变量

时间:2014-12-15 01:51:53

标签: python exec

我试图在函数中使用函数exec声明python变量。例如:

def func():
    varnames = ['x', 'y', 'z']
    vals = [5,5,'abc']
    exec(varnames[0] + '=vals[0]')
    print(x)


func()

导致错误:

NameError: global name 'x' is not defined

然而,确实是这样的情况,' x'在本地人()

def func():
    varnames = ['x', 'y', 'z']
    vals = [5,5,'abc']
    exec(varnames[0] + '=vals[0]')
    print(locals())


func()

结果:

{'vals': [5, 5, 'abc'], 'x': 5, 'varnames': ['x', 'y', 'z']}

显示x存在于本地名称空间中。知道为什么会这样,或者我怎么能绕过它?

1 个答案:

答案 0 :(得分:3)

您可以通过将func()函数中的print语句从print(x)更改为print(locals()['x'])来解决此问题。您的代码现在看起来如下所示。 (在Python 3.3.4上测试)在python 2和3之间" exec"命令从语句更改为更改范围的函数。

def func():
    varnames = ['x','y','z']
    vals = [5,5, 'abc']
    exec(varnames[1] + '=vals[1]')
    print(locals()['y'])