【问题标题】:Why am I getting an invalid syntax error in Python REPL right after IF statement?为什么我在 IF 语句之后立即在 Python REPL 中收到无效的语法错误?
【发布时间】:2018-11-26 20:30:15
【问题描述】:

我认为这是完全正确的。

if False:
    print(1)
print(2)

但是,它在 Python REPL 中给了我一个无效的语法错误。

为什么会这样?

在 Python 3.6.5 (x64)、Windows 10 RS4 上

【问题讨论】:

  • 这很奇怪。在 ipython 中工作,但在 python shell 中不工作
  • Umang Gupta 是对的,确实很奇怪,但是如果你想避免它,你可以做一个 else 语句
  • 这能回答你的问题吗? python print done after while

标签: python read-eval-print-loop


【解决方案1】:

正如user2357112所指出的,这种行为在https://docs.python.org/3/tutorial/introduction.html#first-steps-towards-programming中有解释,

循环体是缩进的:缩进是 Python 对语句进行分组的方式。在交互式提示下,您必须为每个缩进的行键入一个制表符或空格。在实践中,您将使用文本编辑器为 Python 准备更复杂的输入;所有体面的文本编辑器都有自动缩进功能。 当复合语句以交互方式输入时,它必须后跟一个空行以表示完成(因为解析器无法猜测您何时键入了最后一行)。请注意,基本块中的每一行必须缩进相同的数量。

【讨论】:

  • 我认为这只是意味着您需要输入一个空行来结束并评估多行结构。看来不仅如此……
  • 这并不是一个很好的文档引用,因为该文档中的“续行”不仅仅指空行。 (上一段说“对于续行,它使用辅助提示进行提示,默认情况下为三个点 (...)”,the_world_is_flat 示例显示了... 提示用于哪些类型的行。)
  • 有一个更相关的语句later in the tutorial:“当交互输入复合语句时,后面必须有一个空行表示完成(因为解析器无法猜测你何时输入了最后一行)。”
  • @user2357112 是的。在您发表评论后重新阅读它,让我意识到这一点。
【解决方案2】:

REPL 一次只能读取和评估一个语句。 您一次输入了两个语句。

这是可能的,因为 REPL 无法决定第三行是继续 if 构造还是开始一个全新的语句。它必须假设前者完全允许缩进块。

在开始新的语句之前,您必须向 REPL 明确说明您之前的语句已完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 2020-04-21
    相关资源
    最近更新 更多