Python,已定义函数中的exec()不工作

2024-10-05 21:53:54 发布

您现在位置:Python中文网/ 问答频道 /正文

当我在定义的函数中有exec()时,它不工作('NameError:name'a'未定义'):

def abc():
    qwerty = "a = 2"
    exec(qwerty)
abc()
print(a)

但是,当我不使用def时,它会起作用:

qwerty = "a = 2"
exec(qwerty)
print(a)

我如何“修复”它,或者是否有其他类似的解决方案?(我不能在开始时执行这个操作,我需要在程序中间调用那个函数)


Tags: 函数name定义def解决方案execabcprint
2条回答

exec()函数上缺少一个参数

无法访问exec函数中使用的变量,就好像它们是全局声明的一样

一个解决办法是在exec()
中传递两个词典 因此,我通常会这样做。

loc = {}
def abc():
    qwerty = "a = 2"
    exec(qwerty, globals(), loc)
abc()
print(loc['a'])

然后输出2

我的答案与@Cyrill的答案相似,但有一些细微的差别。
有3种方法可以调用exec函数:

  1. 带有1个参数,例如exec('a = 2')。这将在当前范围内执行语句,从而创建一个局部变量
  2. 有两个参数,例如exec('a = 2', globals())。这将在supplied全局名称空间中执行语句,该名称空间也是当前全局名称空间(由globals()返回)。这将改变全局名称空间
  3. 有3个参数,例如exec('a = 2', globals(), loc)。这将使用supplied全局名称空间作为全局名称空间,在supplied本地名称空间(第三个参数)中执行语句。这将改变本地名称空间

通过使用第二种方法,我们可以在全局命名空间中执行代码,因此:

def abc():
    qwerty = 'a = 2'
    exec(qwerty, globals())
abc()
print(a)  # outputs 2

相关问题 更多 >