1

我有两个 python 代码块,一个有效,另一个无效。


工作块:

env = {'user':'xyz'}
for key, value in env.items():
    exec("{} = value".format(key))

print(user)

输出:

xyz


该块不起作用:

def test():
    env = {'user':'xyz'}
    for key, value in env.items():
        exec("{} = value".format(key))

    print(user)

test()

输出:

NameError:未定义名称“用户”


我看到的唯一区别是第一个块是在全局范围内调用的。

你能解释一下吗?

非常感谢!

PS:恕我直言,我知道,我应该避免使用 exec() 但如果我想怎么办。

4

1 回答 1

1

我建议你阅读这个

您必须使用locals()orexeceval访问execPython3 中函数中定义的变量。

def test():
    env = {'user': 'xyz'}
    for key, value in env.items():
        exec("{} = value".format(key))
    exec("print(user)")
    print(locals()['user'])
    print(eval("user"))
 
test()

需要注意的是,如果您尝试存储从eval. 你会得到 NameError。

def test():
    env = {'user': 'xyz'}
    for key, value in env.items():
        exec("{} = value".format(key))
    user = eval("user")
    print(user)

test()

返回

Traceback (most recent call last):
  File "D:/Git/sscgc/test.py", line 8, in <module>
    test()
  File "D:/Git/sscgc/test.py", line 5, in test
    user = eval("user")
  File "<string>", line 1, in <module>
NameError: name 'user' is not defined
于 2021-02-08T05:02:28.490 回答