这个错误消息意味着您试图使用Python 3来跟随一个使用Python 2的
print
语句的示例或运行程序。
print "Hello, World!"
上述语句在Python 3中无效。在Python 3中,您需要在要打印的值周围添加括号:
print("Hello, World!")
“SyntaxError: Missing parentheses in call to 'print'” 是 Python 3.4.2 中新增的错误提示信息,主要是为了帮助那些在运行 Python 3 的同时尝试遵循 Python 2 教程的用户。
在 Python 3 中,打印值已经从一个独立的语句变成了普通的函数调用,因此现在需要使用括号:
>>> print("Hello, World!")
Hello, World!
在Python 3的早期版本中,解释器仅报告通用的语法错误,没有提供任何有用的提示来帮助确定问题的原因:
>>> print "Hello, World!"
File "<stdin>", line 1
print "Hello, World!"
^
SyntaxError: invalid syntax
关于为什么在Python 3中print
成为了普通函数,这与语句的基本形式无关,而是因为你如何做更复杂的事情,比如在stderr上打印多个项目并以尾随空格结束而不是结束行。
在Python 2中:
>>> import sys
>>> print >> sys.stderr, 1, 2, 3,
1 2 3 4 5 6
在Python 3中:
>>> import sys
>>> print(1, 2, 3, file=sys.stderr, end=" ")
1 2 3 4 5 6
自2017年9月发布的Python 3.6.3版本开始,与Python 2.x的print语法相关的一些错误消息已经更新,建议使用Python 3.x的相应语法。
>>> print "Hello!"
File "<stdin>", line 1
print "Hello!"
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Hello!")?
"Missing parentheses in call to print"错误是编译时语法错误,因此可以访问原始源代码,并且能够在建议的替换中包含该行其余部分的完整文本。但它目前不会尝试确定应在该表达式周围放置哪些适当的引号(这并非不可能,只是足够复杂以至于还没有完成)。
对于右移操作符引发的TypeError
也已经进行了自定义:
>>> print >> sys.stderr
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for >>: 'builtin_function_or_method' and '_io.TextIOWrapper'. Did you mean "print(<message>, file=<output_stream>)"?
由于该错误是在代码运行时引发的,而不是在编译时引发的,因此它无法访问原始源代码,因此在建议替换表达式中使用元变量(<message>
和<output_stream>
),而不是用户实际输入的内容。与语法错误情况不同的是,在自定义右移错误消息中在Python表达式周围放置引号是直截了当的。
Did you mean print("Hello, World!")?
)和应该打印什么(例如,在 3.8 中,print int()
只会给出SyntaxError: invalid syntax
)。 - Karl KnechtelSyntaxError: invalid syntax
,即使给出了一个字符串字面量。) - undefined