Exec语句将无法正确定义名称

时间:2012-04-12 11:12:30

标签: python python-2.7

  

可能重复:
  declaring a global dynamic variable in python

>>> def f():
        global cat
        exec 'cat'+'="meow"'
        return
>>> f()
>>> cat
Traceback (most recent call last):
  File "<pyshell#23>", line 1, in <module>
    cat
NameError: name 'cat' is not defined

这只是我遇到的问题的一个简单例子。在我的实际脚本中,我需要创建和命名类的各种实例,因此需要exec语句。

只需致电

exec 'cat'+'="meow"'

直接在shell中工作正常,但只要它被打包在一个函数中,它似乎就不再起作用了。

2 个答案:

答案 0 :(得分:3)

我仍然不明白你为什么使用exec,这是一个糟糕的设计选择,替代方案通常更容易,例如,而不是全局,然后你可以简单地做其他事情

ns = {}

def f():
    ns["cat"] = "miow"

print ns

现在不是那么干净吗?

答案 1 :(得分:0)

看起来exec忽略了全局,文档有点模糊。但这很有效:

>>> def f():
...         global cat
...         exec 'global cat; cat'+'="meow"'
... 
>>> 
>>> f()
>>> cat
'meow'