为什么 else 在 for/while 语句中的行为与 if/try 语句中不同?

2024-01-10

我最近偶然发现 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(使用前将#替换为@)

为什么 else 在 for/while 语句中的行为与 if/try 语句中不同? 的相关文章

随机推荐