如何在Python中使用eval赋值给变量?

106 投票
5 回答
83053 浏览
提问于 2025-04-16 15:21

好的,我的问题很简单:我怎么能用eval在Python中给一个变量赋值呢?我试过用eval('x = 1'),但这不行。它返回了一个语法错误(SyntaxError)。为什么这样做不行呢?

5 个回答

2

你可以使用lambda,像这样:

eval('(lambda x=10: x+2)()')
18

你不能这样做,因为变量赋值是一个语句,而不是一个表达式,而 eval 只能处理表达式。你应该使用 exec

更好的办法是,干脆别用这两个,告诉我们你真正想要做什么,这样我们才能帮你找到一个安全又合理的解决方案。

165

因为 x=1 是一个语句,而不是一个表达式。如果你想执行语句,可以使用 exec

>>> exec('x=1')
>>> x
1

顺便说一下,如果你只是想动态地给一个名字赋值,有很多方法可以避免使用 execeval,比如你可以用字典,或者使用 setattr 函数或者 locals() 字典

>>> locals()['y'] = 1
>>> y
1

更新:虽然上面的代码在 REPL 中可以运行,但在函数内部就不行了。如果 exec 不适用,可以查看 在 Python 中修改局部变量,那里有一些替代方案。

撰写回答