SyntaxError:print在eval()中不起作用

时间:2017-05-28 10:50:10

标签: python printing syntax-error eval

代码:

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

我做错了什么?

3 个答案:

答案 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