Why am I getting "SyntaxError:" on OS X Python 3.4?

Why am I getting "SyntaxError:" on OS X Python 3.4?

我刚买了一台新的 MackBook Pro 并安装了 Python 3.4。 我 运行 终端并输入

python3.4

我得到了:

Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 23 2015, 02:52:03) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

我输入了:

>>> print("Hello world") 
Hello world

一切都很好,但是当我尝试做一些更复杂的事情时,我 运行 遇到了麻烦,我做到了:

>>>counter = 5
>>>
>>> while counter > 0:
...     counter -= 1
...     print()
... print("Hello World")

我收到错误:

  File "<stdin>", line 4
print("Hello World")
    ^
SyntaxError: invalid syntax

我的猜测是错误在 'print("Hello World")' 上,但我不知道为什么,如果我想让它在循环结束后 运行 就不需要缩进完成的。任何帮助将不胜感激。

注意到“...”提示了吗?这告诉你交互式解释器知道你在一个块中。在执行最后的打印语句之前,您必须输入一个空行来终止该块。

这是 运行 交互式的产物 -- 在文件中键入代码时不需要空行。

您必须使用 space 进行缩进(和“;”分隔两条指令:

>>> counter = 5
>>> while counter > 0:
    counter -= 1
    print("Hello")


Hello
Hello
Hello
Hello
Hello
>>> 

因为语法错误。

>>> while counter > 0:
...     counter -= 1
...     print()
... print("Hello World")

这就是 python 控制台的工作方式 - 您可以看到在 print('hello world') 之前有三个点,这表明 python 仍然期望 indendted属于while块的代码。

您需要双击回车才能进入正常模式。 (由 >>> 发出信号)。此外,如果您将来遇到类似问题,请始终尝试 运行 从文件中而不是仅从控制台中找到它们。

这是由 python 的交互模式的一个怪癖引起的,它特别对待换行符。

当您有 ... 提示时,它 之后必须 是前面复合语句的延续,而不是新语句的开头,它将处于非交互模式。再次按回车键使 ... 提示消失。


观察者失败:

echo $'while False: pass\npass' | python -i

但这行得通:

echo $'while False: pass\npass' | python

您可以阅读详细信息 in the grammar reference。交互式输入使用single_input开始状态,非交互式输入使用file_input开始状态。