声明行为奇怪吗?

时间:2012-11-03 18:27:33

标签: python python-3.x

我无法弄清楚为什么以下陈述不起作用。

randomKey = random.choice(list(topic.keys()))
randomValue = random.choice(topic[randomKey])

current = "-" * len(randomValue) 
while current != randomValue: 
   (statements)
else:
   (statements)

但是,如果我改变第1行

while current == randomValue:

'else'后的语句正确执行。否则,'else'之后的语句不会执行。知道为什么可能导致奇怪的行为吗?已排除完整代码,因为它将贯穿整个页面。

2 个答案:

答案 0 :(得分:1)

它是Python语法的一部分。来自the documentation

  

这个[a while语句]重复测试表达式,如果是,则执行第一个套件;如果表达式为false(可能是第一次测试),则else子句的套件(如果存在)将被执行并且循环终止。

所以在第一种情况下,必须是while条件从不评估为false,而在第二种情况下它最终会评估为false。请注意,明确地断开循环将执行else子句。

答案 1 :(得分:0)

elsewhile一起使用时,如果while循环以表达式为假,则表达式计算为假值,而不是被{{1语句(或执行通过breakreturn离开函数 - 例外)。第二个示例中的while条件必须失败,因此没有机会发生raise,返回函数或抛出异常,因此break语句将始终运行。

docs for while