如何给Python中eval函数的输出赋值
我试着给 eval
函数的输出赋值,像这样:
d = {"a": 10}
st1 = 'd'
st2 = '["a"]'
eval(st1 + st2) = 15
结果我遇到了这个错误:
File "<stdin>", line 1
SyntaxError: can't assign to function call
我还试过这样:
x = eval(st1 + st2)
x = 15
但是这并没有改变 d
字典。我还尝试把整个赋值都用 eval
处理,像这样:
eval(st1 + st2 + ' = 15')
但我又遇到了这个错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1
d["a"] = 15
^
SyntaxError: invalid syntax
我也试过使用 ast.literal_eval()
函数,结果都是一样的。那么,有没有办法解决这个问题呢?
编辑 1:
为了澄清 @LennartRegebro 要求的内容,我想说我有一些字典,里面有特定的键值对。我有一个文本文件是用户提供的,里面定义了一些值,我需要把基本字典的值改成这些用户定义的值。我有一个解析器,可以解析这个文本文件,对于每个需要更改的地方,它会给我一个包含字典名称、键和值的元组;这些都是字符串。我想用 eval
函数来进行赋值,但我明白我不能这样做。
编辑 2:
根据 @lejlot 的建议,我使用了 globals()
并在我的代码中添加了以下几行:
import re
pattern = re.compile(r'\["([A-Za-z0-9_\./\\-]+)"\]')
globals()[st1][pattern.findall(st2)[0]] = 15
2 个回答
0
做一个简单的,
exec(st1 + st2 + '= 15')
eval
是不行的。要用 exec
。而且赋值操作应该在参数内部完成。
不过,使用 exec
是非常不推荐的做法。
3
你为什么不通过 globals()
(或者 locals()
)来访问你的变量,而是用 eval
呢?
d={'a':10}
globals()['d']['a']=15
print d['a']
在你的具体情况下
d={'a':10}
s1='d'
s2='a'
globals()[s1][s2]=15
print d['a']