Python eval()函数中有效的语句有哪些?

4

我尝试过

eval('print("hello world")')
eval('return 0')

以上两种方式都是错误的。为什么它们是无效的,使用eval()时应遵循哪些规则(除了尽可能少地使用)?


1
前者适用于Python 3.x,在Python 2.x中“可能是错误的使用print”的方式。 - user166390
2个回答

8
在Python中,eval()函数用于计算表达式(即产生一个值的内容)。而printreturn都是定义为语句(但在Python 3中,print实际上是一个函数调用,也就是一个表达式)。对于执行语句,需要使用 exec语句

如果我在except块中使用exec('return 0'),它会报告SyntaxError: 'return' outside function,即使它确实在函数内部。为什么? - user1561108
2
因为在exec内部,没有函数(代码在不同的执行上下文中运行,就好像它是从自己独立的源文件加载的一样)。 - Greg Hewgill
2
不可能直接导致调用者返回(这就像函数f()调用g(),然后g()做一些以某种方式导致f()返回值的事情)。您可以使用eval()运行一些外部代码,然后根据从eval()返回的值,您可以决定从函数中return一些东西或不返回。 - Greg Hewgill

0

eval()函数用于将变量的值作为变量进行求值。

例如:

var="Hello World!"
code="var"
print eval(code)

输出应该是:

Hello World!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接