为了账号安全,请及时绑定邮箱和手机立即绑定

在Python中,“SyntaxError:在调用‘print’时缺少括号”意味着什么?

在Python中,“SyntaxError:在调用‘print’时缺少括号”意味着什么?

慕容708150 2019-06-05 16:20:26
在Python中,“SyntaxError:在调用‘print’时缺少括号”意味着什么?当我试图使用print语句,它给出了以下错误:>>> print "Hello, World!"   File "<stdin>", line 1     print "Hello, World!"                         ^SyntaxError: Missing parentheses in call to 'print'那是什么意思?
查看完整描述

3 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

此错误消息意味着您正在尝试使用Python 3来遵循一个示例或运行使用Python 2的程序。print声明:

print "Hello, World!"

上面的语句在Python 3中不起作用。在Python 3中,需要在要打印的值周围添加括号:

print("Hello, World!")

“SyntaxError:调用‘print’时缺少括号”是在Python3.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

至于为什么 print在Python 3中,它变成了一个普通的函数,它与语句的基本形式无关,而是与如何执行更复杂的操作有关,比如将多个项打印到带有尾部空格的stderr,而不是结束行。

在Python 2中:

>>> import sys>>> print >> sys.stderr, 1, 2, 3,; print >> sys.stderr, 4, 5, 61 2 3 4 5 6

在Python 3中:

>>> import sys>>> print(1, 2, 3, file=sys.stderr, end=" "); print(4, 5, 6, file=sys.stderr)1 2 3 4 5 6

从2017年9月的Python3.6.3发行版开始,已经更新了一些与Python2.x打印语法相关的错误消息,以推荐它们的Python3.x对应项:

>>> print "Hello!"
  File "<stdin>", line 1
    print "Hello!"
                 ^SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Hello!")?

由于“调用打印中缺少的括号”是编译时语法错误,因此可以访问原始源代码,因此可以在建议的替换中包含行的其余部分的全文。然而,它目前并没有试图找出适当的引号来围绕这个表达式(这并不是不可能的,只是足够复杂,以至于还没有完成)。

这个TypeError还为右班操作员定制了:

>>> print >> sys.stderrTraceback (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表达式周围的引号非常简单。


查看完整回答
反对 回复 2019-06-05
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

语法从Python 2更改为Python 3。在Python 2中,

print "Hello, World!"

将起作用,但在Python 3中,使用括号作为

print("Hello, World!")

这相当于Scala和Java的语法。


查看完整回答
反对 回复 2019-06-05
?
慕斯709654

TA贡献1840条经验 获得超5个赞

如果您的代码应该同时在Python 2和3中工作,您可以通过在程序开始时加载它来实现这一点:

from __future__ import print_function   # If code has to work in Python 2 and 3!

然后您可以Python 3方式打印:

print("python")

如果您想在不创建新行的情况下打印某些内容,可以这样做:

for number in range(0, 10):
    print(number, end=', ')


查看完整回答
反对 回复 2019-06-05
  • 3 回答
  • 0 关注
  • 1384 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信