首页 > 解决方案 > 函数中的命令执行,名称错误 - 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) 返回 [0,1,2,3] 所以它可以工作。但对于我得到这个的例子:

proba11 = possibilite
NameError: name 'proba11' is not defined

没有关于全球人或本地人的故事,一切都是本地人......

标签: pythonpython-3.xfunctionexecpython-exec

解决方案


由于局部变量的存储方式,在 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)

哪个按预期工作。

你可以在这里读更多关于它的内容:


推荐阅读