我最近偶然发现 Python 处理不同复合语句中 else 子句的方式似乎不一致。由于Python设计得如此之好,我确信有一个很好的解释,但我想不出来。
考虑以下:
if condition:
do_something()
else:
do_something_else()
Here, do_something_else()
仅在以下情况下执行condition
是假的,正如预期的那样。
同样,在
try:
do_something()
except someException:
pass:
else:
do_something_else()
finally:
cleanup()
do_something_else()
仅当没有发生异常时才执行。
但在 for 或 while 循环中,总是会执行 else 子句,无论for/while block
是否已被执行。
for i in some_iterator:
print(i)
else:
print("Iterator is empty!")
总是会打印“迭代器为空!”,无论我说some_iterator = []
or some_iterator = [1,2,3]
。同样的行为在while-else
条款。在我看来,这else
行为更像finally
在这些情况下。我在忽略什么?
The for else
构造执行else
条款如果没有break
循环中执行了语句,如此处所述 http://docs.python.org/reference/compound_stmts.html#the-for-statement例如,这个 else 子句永远不会被评估
for i in range(1,10):
if i % 5 == 0:
print i
break
else:
print "nothing divisible by 5"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)