在函数中执行命令,名称错误 - python3
Command exec in a function, name error - python3
我是 Python 的初学者,我遇到了一个我无法理解的问题。我试图用 exec() 定义一个变量,然后打印它。而且效果很好。但是当我在函数中执行相同的代码时,它不起作用...
示例:
def fonct():
possibilite = [0,1,2,3]
testc = 0
testl = 1
commande = "proba"+str(testc+1)+str(testl)+" = possibilite"
exec(commande)
print(commande)
print(proba11)
相同但不在函数中的结果是命令 print(proba11) returns [0,1,2,3] 所以它有效。但是对于这个例子,我得到了这个:
proba11 = possibilite
NameError: name 'proba11' is not defined
没有关于全局或本地的故事,一切都是本地的...
由于局部变量的存储方式,在 Python 3 中使用 exec()
更新局部变量很棘手。它曾经在 Python 2.7 及更早版本中工作。
要解决此问题,您需要
- 将显式
locals
字典传递给 exec
- 从更新的本地字典中获取新定义的变量
像这样:
def fonct():
possibilite = [0, 1, 2, 3]
testc = 0
testl = 1
varname = "proba" + str(testc + 1) + str(testl)
commande = varname + " = possibilite"
_locals = locals()
exec(commande, globals(), _locals)
proba11 = _locals[varname]
print(proba11)
按预期工作。
您可以在此处阅读更多相关信息:
- exec() and variable scope
- How does exec work with locals?
我是 Python 的初学者,我遇到了一个我无法理解的问题。我试图用 exec() 定义一个变量,然后打印它。而且效果很好。但是当我在函数中执行相同的代码时,它不起作用...
示例:
def fonct():
possibilite = [0,1,2,3]
testc = 0
testl = 1
commande = "proba"+str(testc+1)+str(testl)+" = possibilite"
exec(commande)
print(commande)
print(proba11)
相同但不在函数中的结果是命令 print(proba11) returns [0,1,2,3] 所以它有效。但是对于这个例子,我得到了这个:
proba11 = possibilite
NameError: name 'proba11' is not defined
没有关于全局或本地的故事,一切都是本地的...
由于局部变量的存储方式,在 Python 3 中使用 exec()
更新局部变量很棘手。它曾经在 Python 2.7 及更早版本中工作。
要解决此问题,您需要
- 将显式
locals
字典传递给exec
- 从更新的本地字典中获取新定义的变量
像这样:
def fonct():
possibilite = [0, 1, 2, 3]
testc = 0
testl = 1
varname = "proba" + str(testc + 1) + str(testl)
commande = varname + " = possibilite"
_locals = locals()
exec(commande, globals(), _locals)
proba11 = _locals[varname]
print(proba11)
按预期工作。
您可以在此处阅读更多相关信息:
- exec() and variable scope
- How does exec work with locals?