【发布时间】:2016-04-14 07:44:39
【问题描述】:
我尝试在函数的本地范围内使用 eval()。但是它总是在全局范围内进行评估。
自包含示例:
1- 此代码有效:
var1 = 1
var2 = 2
var3 = 3
myDict = dict((name, eval(name)) for name in ["var1",
"var2",
"var3"])
print(myDict["var1"])
2- 为 lvar1 抛出 NameError
def test1():
lvar1 = 1
lvar2 = 2
lvar3 = 3
myDict = dict((name, eval(name)) for name in ["lvar1",
"lvar2",
"lvar3"])
print(myDict["lvar1"])
3- 与 2 相同的结果。
def test2():
lvar1 = 1
lvar2 = 2
lvar3 = 3
myDict = dict((name, eval(name), locals()) for name in ["lvar1",
"lvar2",
"lvar3"])
print(myDict["lvar1"])
【问题讨论】:
-
或许这里更重要的问题是do you really need eval?
-
@cjahangir 那是¯\_(ツ)_/¯ 建议
-
@Adib,它可以在我的电脑上运行
-
@joost 我尝试仅在测试 pytest 的夹具时使用 eval()。所以这不会是一个安全漏洞,你是对的,我找到了另一种方法,但我仍然对如何做到这一点感兴趣。因为一定是python有这个内置的原因
-
@cjahangir python中的“string”和“string”没有任何区别,你的python解释器是什么?