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

新手上路,请多包涵

当我尝试在 Python 中使用 print 语句时,出现以下错误:

 >>> print "Hello, World!"
  File "<stdin>", line 1
    print "Hello, World!"
                        ^
SyntaxError: Missing parentheses in call to 'print'

这意味着什么?

原文由 ncoghlan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

此错误消息表示您正在尝试使用 Python 3 来遵循示例或运行使用 Python 2 print 语句的程序:

 print "Hello, World!"

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

 print("Hello, World!")


“SyntaxError:调用‘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

至于 为什么 print 成为 Python 3 中的一个普通函数,这与语句的基本形式无关,而是与你如何做更复杂的事情有关,比如用尾随空格将多个项目打印到 stderr而不是结束这一行。

在 Python 2 中:

 >>> import sys
>>> print >> sys.stderr, 1, 2, 3,; print >> sys.stderr, 4, 5, 6
1 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 月发布的 Python 3.6.3 开始,一些与 Python 2.x 打印语法相关的错误消息已更新,以推荐其对应的 Python 3.x:

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

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

为右移运算符引发的 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 表达式周围很简单。

原文由 ncoghlan 发布,翻译遵循 CC BY-SA 4.0 许可协议

不幸的是,旧的 xkcd 漫画 不再完全是最新的了。

https://imgs.xkcd.com/comics/python.png

从 Python 3.0 开始,您必须编写:

 print("Hello, World!")

还有人要写那个 antigravity 库 :(

原文由 Christian 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题