can';在python函数中找不到用exec声明的变量
我试图在函数中使用函数exec声明python变量。例如:can';在python函数中找不到用exec声明的变量,python,exec,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”在locals()中确实存在 结果: {'vals': [5, 5, 'ab
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”在locals()中确实存在
结果:
{'vals': [5, 5, 'abc'], 'x': 5, 'varnames': ['x', 'y', 'z']}
显示x存在于本地命名空间中。你知道为什么会发生这种情况,或者我可以怎样解决吗?你可以通过将函数
func()
中的print语句从print(x)
更改为print(locals()['x'])
来解决这个问题。您的代码现在如下所示。(在Python3.3.4上测试)在Python2和Python3之间,“exec”命令从语句更改为函数,从而更改了范围
def func():
varnames = ['x','y','z']
vals = [5,5, 'abc']
exec(varnames[1] + '=vals[1]')
print(locals()['y'])
您可以通过将函数
func()
中的print语句从print(x)
更改为print(locals()['x'])
来解决这个问题。您的代码现在如下所示。(在Python3.3.4上测试)在Python2和Python3之间,“exec”命令从语句更改为函数,从而更改了范围
def func():
varnames = ['x','y','z']
vals = [5,5, 'abc']
exec(varnames[1] + '=vals[1]')
print(locals()['y'])
您可以通过将函数
func()
中的print语句从print(x)
更改为print(locals()['x'])
来解决这个问题。您的代码现在如下所示。(在Python3.3.4上测试)在Python2和Python3之间,“exec”命令从语句更改为函数,从而更改了范围
def func():
varnames = ['x','y','z']
vals = [5,5, 'abc']
exec(varnames[1] + '=vals[1]')
print(locals()['y'])
您可以通过将函数
func()
中的print语句从print(x)
更改为print(locals()['x'])
来解决这个问题。您的代码现在如下所示。(在Python3.3.4上测试)在Python2和Python3之间,“exec”命令从语句更改为函数,从而更改了范围
def func():
varnames = ['x','y','z']
vals = [5,5, 'abc']
exec(varnames[1] + '=vals[1]')
print(locals()['y'])
很可能您使用的是Python3,
exec
已经不能再做这样的事情了。是的,没错,我使用的是Python3。因此,在Python3中,不可能有一个字符串用作变量名:@AshwiniChaudhary haveLOAD\u NAME
在py3中不再是这样的东西。我想您的解决方法是强制进行局部变量查找:print(locals()['x'])
。我想这个解决方案的问题是,我希望最终使用第二个位置参数exec(varnames[0]+'=vals[0]',globals())使新创建的变量成为全局变量。但是,这不起作用,因为只能在本地名称空间中找到VAL。有没有想过我该如何解决这个问题?我应该说你已经帮了大忙了。谢谢很可能您使用的是Python3,exec
已经不能再做这样的事情了。是的,没错,我使用的是Python3。因此,在Python3中,不可能有一个字符串用作变量名:@AshwiniChaudhary haveLOAD\u NAME
在py3中不再是这样的东西。我想您的解决方法是强制进行局部变量查找:print(locals()['x'])
。我想这个解决方案的问题是,我希望最终使用第二个位置参数exec(varnames[0]+'=vals[0]',globals())使新创建的变量成为全局变量。但是,这不起作用,因为只能在本地名称空间中找到VAL。有没有想过我该如何解决这个问题?我应该说你已经帮了大忙了。谢谢很可能您使用的是Python3,exec
已经不能再做这样的事情了。是的,没错,我使用的是Python3。因此,在Python3中,不可能有一个字符串用作变量名:@AshwiniChaudhary haveLOAD\u NAME
在py3中不再是这样的东西。我想您的解决方法是强制进行局部变量查找:print(locals()['x'])
。我想这个解决方案的问题是,我希望最终使用第二个位置参数exec(varnames[0]+'=vals[0]',globals())使新创建的变量成为全局变量。但是,这不起作用,因为只能在本地名称空间中找到VAL。有没有想过我该如何解决这个问题?我应该说你已经帮了大忙了。谢谢很可能您使用的是Python3,exec
已经不能再做这样的事情了。是的,没错,我使用的是Python3。因此,在Python3中,不可能有一个字符串用作变量名:@AshwiniChaudhary haveLOAD\u NAME
在py3中不再是这样的东西。我想您的解决方法是强制进行局部变量查找:print(locals()['x'])
。我想这个解决方案的问题是,我希望最终使用第二个位置参数exec(varnames[0]+'=vals[0]',globals())使新创建的变量成为全局变量。但是,这不起作用,因为只能在本地名称空间中找到VAL。有没有想过我该如何解决这个问题?我应该说你已经帮了大忙了。谢谢