【问题标题】:Not printing after if statmentif 语句后不打印
【发布时间】:2014-08-25 15:23:58
【问题描述】:

所以我刚刚开始学习使用 Python,但遇到了语法错误。

在我正在使用的书之后,这是一个简单的 if 语句,然后是一个 print 语句,无论 if 语句如何都会发生。

name = "Doug"
if name == 'Doug' :
    print "Hello, Doug!"
print "How are you today?"

预期的输出是:

Hello Doug!
How are you today?

如果name != Doug,那么输出应该是

How are you today?

我已经在 C++ 和 Java 中做了一千次简单的 ifs,但使用了括号。出于某种原因,最终打印返回语法错误。

我使用的是 Python 2.7.8,而不是 Python 3,并且使用 printprint() 会得到相同的结果。

编辑: 解释器版本中没有多少换行符起作用,但是在 .py 文件中运行脚本却完美无缺。由于某种原因,我的书没有提到这一点。

【问题讨论】:

  • 请向我们展示错误的完整追溯;发布的代码有效。
  • 检查缩进。制表符与空格是混淆的典型来源。
  • 另外,如果您从网页复制代码,我们会厌倦不间断的空格或零宽度连接符。
  • 最后但同样重要的是,如果您将代码直接粘贴到 Python 会话中,那么您需要在两个 print 语句之间添加 换行符,否则解释器不会将其视为一个单独的块。

标签: python if-statement syntax


【解决方案1】:

如果我将您的代码放在 .py 文件中并通过解释器运行该文件,那么您的代码对我有用。例如。 python hello.py。但是,如果我以交互方式运行 python 解释器,那么我可以在第二个打印语句处重现语法错误。

我认为这只是交互模式的一个怪癖。我也可以让它在交互模式下工作,方法是在两个 print 语句之间添加一个额外的换行符。对于它的价值,交互模式提示让我认为它无法识别 if 语句的结尾,直到我在它后面输入额外的换行符(否则,if 块中的另一个语句可能会跟随)。

【讨论】:

  • 交互式解释器不能仅仅猜测何时输入复合结构,因此它使用空行来代替。
  • interactive input grammar; 请注意,在交互模式下,(*)复合语句必须后跟一个空行;这是帮助解析器检测输入结束所必需的。