else 语法结构

Python 的循环结构(forwhile)都可以带一个可选的 else 子句:

1
2
3
4
5
6
for item in iterable:
# 循环体
...
else:
# 仅当循环“正常结束”时执行
...
1
2
3
4
5
6
while condition:
# 循环体
...
else:
# 仅当循环“正常结束”时执行
...

else 执行逻辑

情况 是否执行 else
循环 正常执行完毕 ✅ 执行
循环 被 break 提前终止 ❌ 不执行
循环体 从未执行过 ✅ 执行
循环中遇到 continue ✅ 不影响 else 的执行

for...else 示例

示例 1:无 break,循环正常结束

1
2
3
4
for i in range(3):
print(i)
else:
print("循环正常结束")

输出:

1
2
3
4
0
1
2
循环正常结束

✅ 因为循环没有被中断,else 执行。

示例 2:循环被 break 中断

1
2
3
4
5
6
for i in range(5):
if i == 2:
break
print(i)
else:
print("循环正常结束")

输出:

1
2
0
1

❌ 因为循环被 break 打断,else 不执行。

示例 3:查找元素的典型用法

1
2
3
4
5
6
7
8
9
nums = [2, 4, 6, 8]
target = 5

for n in nums:
if n == target:
print("找到了!")
break
else:
print("没找到。")

输出:

1
没找到。

✅ 这种用法最常见:“循环中没找到,就执行 else”
(可以把 else 理解为 “for 没有被 break 终止时执行的后续处理”)

while...else 示例

示例 1:正常结束执行 else

1
2
3
4
5
6
i = 0
while i < 3:
print(i)
i += 1
else:
print("while 正常结束")

输出:

1
2
3
4
0
1
2
while 正常结束

示例 2:break 中断则不执行 else

1
2
3
4
5
6
7
8
i = 0
while i < 5:
if i == 2:
break
print(i)
i += 1
else:
print("while 正常结束")

输出:

1
2
0
1

❌ 因为用了 breakelse 不执行。

设计哲学

Python 的 else 不是 “if 的 else”,而更像是 “no-break 子句”:

else 表示循环没有被 break 打断时要执行的语句。

可以记作伪逻辑:

1
2
3
4
5
6
for/while 循环:
...
if break:
# 提前跳出
else:
# 只有没 break 才会到这里

应用场景

  1. 搜索任务:在序列中查找是否存在某个元素;
  2. 验证任务:循环验证一批条件,全部通过才执行 else;
  3. 超时重试逻辑:在 while 循环中重试多次,如果没提前退出,就执行 else。

例如:

1
2
3
4
5
6
7
8
9
attempts = 0
while attempts < 3:
success = try_connect()
if success:
print("连接成功")
break
attempts += 1
else:
print("多次重试仍失败")

注意事项

  • else 不是 “循环条件为 False 执行”;
  • 只要 没有 break,就会执行;
  • 如果循环体一次都没执行,else 仍然会执行。