代码:
eval("print('foobar')")
输出:
Traceback (most recent call last):
File "Untitled.py", line 30, in <module>
eval("print('foobar')")
File "<string>", line 1
print('foobar')
^
SyntaxError: invalid syntax
我做错了什么?
答案 0 :(得分:2)
print
是Python 2中的运算符,Python 3中的函数。您使用的是哪个版本?
答案 1 :(得分:1)
您必须使用exec函数。像这样:
exec("print('foobar')")
参见What is the difference between an expression and a statement in Python? 了解更多信息。
答案 2 :(得分:1)
eval
评估表达式而不是语句,因此您需要将print
函数传递给它,而不是print
语句 。默认情况下,print
是Python 2中的语句,而{3}}语句在Python 3中不存在。但是,print
函数是通过print
导入在最新版本的Python 2中提供。 __future__
函数实际上是在Python 2的那些版本中定义的,但它被print
语句掩盖了;导入使print
语句不可用,从而暴露print
函数。
演示,在Python 2.6.6上测试:
print
<强>输出强>
from __future__ import print_function
eval("print('foobar')")
顺便说一句,除非您别无选择,否则使用foobar
或eval
通常 它们相对较慢,如果您将未经过语言化的字符串传递给它们进行评估/执行,则存在安全风险。有关详细信息,请参阅SO退伍军人Ned Batchelder的Eval really is dangerous。要评估简单的Python文字,可以使用ast.literal_eval
。