尝试在一行if语句中使用pass关键字时出错

8

我很惊讶这个方法能够正常工作:

if 5 % 2 == 0:
        print "no remainder"
else:
        pass

但不包括这个:

print "no remainder" if 5% 2 == 0 else pass

SyntaxError: invalid syntax

4
提醒一下:这里的 pass 关键字是不必要的。你可以简单地写成 5 % 2 == 0: print "No remainder",并完全跳过 else: pass 部分。 - msvalkon
如果5%2 == 0,则打印“没有余数”,否则为0。 - Tom
+1 msvalkon所说的; else pass与没有else子句相同。此外,不正确的语法来自于使用print,而不是else - salezica
但是我想要做的是打印出处理每1000行所需的时间,如果它仍在迭代到下一个1000,我不希望发生任何事情。 - Derek Krantz
@DerekKrantz,你只需要一个简单的if语句,就像我回答中的那个。 - Lev Levitsky
1个回答

17
后面是翻译的内容:

后者不是一个if语句,而是一个表达式(我的意思是,print是一个语句,但其余部分被解释为表达式,这会导致失败)。表达式具有值。pass没有值,因为它是一个语句。

您可能将其视为两个语句(print或pass),但解释器看待它是不同的:

expr = "no remainder" if 5% 2 == 0 else pass
print expr

第一行存在问题,因为它混合了表达式和语句。

一行代码的if语句是不同的东西:

if 5 % 2 == 0: print "no remainder"

这可以被称为单行if语句。

P.S. 在官方文档中,三元表达式被称为“条件表达式”。

三元表达式使用了你尝试使用的语法,但是它需要两个表达式和一个条件(也是一个表达式):

expr1 if cond else expr2

如果bool(cond) == True,则它的值为expr1,否则为expr2


谢谢 Lev。当然,在 Python 中输入“什么是表达式”,会得到以下顶部结果:https://dev59.com/B2445IYBdhLWcg3wmLdd - Derek Krantz
阅读了链接的帖子后,似乎表达式实际上也是语句。但无论如何,重要的是理解表达式是具有值的东西。 - Lev Levitsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接