代码之家  ›  专栏  ›  技术社区  ›  mhhabib

为什么它跳过else块[复制]

  •  2
  • mhhabib  · 技术社区  · 4 年前

    else 在循环的重复内部阻塞之后立即阻塞。

    for i in range(3):
        print('Loops', i)
    else:
        print('Else block!')
    

    输出

    Loops 0
    Loops 1
    Loops 2
    Else block!
    

    令人惊讶的是,else块在循环完成后立即运行。现在如果我设定一个 break 然后显示以下输出。

    for i in range(3):
        print('Loops', i)
        if i == 1:
            break
    else:
        print('Else block!')
    

    Loops 0
    Loops 1
    

    我的问题是,为什么 其他的 已跳过。在这种情况下,循环没有完成?

    3 回复  |  直到 4 年前
        1
  •  1
  •   Chris    4 年前

    因为 else 对于 for 类似于 try . 只有在 对于 回路未断开。从 the official document :

        2
  •  0
  •   Synthaze    4 年前

    实际上,此语法的预期用途是生成搜索循环。

    一旦你得到了符合条件的物品,你就可以 break 所以别提 for 不经过 else .

    但是,如果找不到任何内容,则可能需要进行与搜索失败相关的额外处理,因此 其他的 声明如下。

        3
  •  -1
  •   Alexander Hernandez    4 年前

    当它离开的时候,整个循环也会被打破。