StopIteration 异常
Coddy Python 迭代器 课程的第 3 课,共 13 课。
StopIteration 异常是 Python 迭代器协议的重要组成部分。它表示迭代序列已结束,并在控制迭代器行为方面发挥着重要作用。让我们来了解这个异常及其重要性。
什么是 StopIteration?
StopIteration 是 Python 内置的异常。当迭代器耗尽,也就是没有更多项可以返回时,就会引发此异常。
什么时候会引发 StopIteration?
在以下两种主要情况下,Python 会自动引发 StopIteration 异常:
- 对没有更多项的迭代器调用
next()函数时。 - 自定义迭代器的
__next__()方法被实现为在迭代结束时引发StopIteration时。
StopIteration 示例
来看看 StopIteration 如何与简单的迭代器一起工作:
my_list = [1, 2, 3]
my_iterator = iter(my_list)
print(next(my_iterator)) # 输出:1
print(next(my_iterator)) # 输出:2
print(next(my_iterator)) # 输出:3
print(next(my_iterator)) # 抛出 StopIteration 异常
在这个示例中,遍历完 my_list 中的所有元素后,再次调用 next() 会引发 StopIteration 异常。
对迭代器行为的重要性
StopIteration 异常之所以重要,有以下几个原因:
- 表示结束:它会清楚地表明迭代已经结束。
- 结束 for 循环:Python 的
for循环依靠StopIteration来判断何时结束。 - 控制自定义迭代器:创建自定义迭代器时,引发
StopIteration可以让你定义迭代何时结束。
处理 StopIteration
for 循环会自动处理 StopIteration,但直接使用 next() 时,你可能需要显式处理此异常:
my_iterator = iter([1, 2, 3])
try:
while True:
item = next(my_iterator)
print(item)
except StopIteration:
print("Iteration finished")
这段代码会打印数字 1、2 和 3,并在捕获到 StopIteration 异常后打印 "Iteration finished"。
理解 StopIteration 异常对于在 Python 中使用迭代器至关重要,因为它提供了一种标准化的机制来控制迭代并使其结束。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
挑战
简单创建一个自定义迭代器,生成不超过给定上限的质数序列。当迭代器达到或超过上限时,应使用 StopIteration 异常来表示序列结束。
已提供以下内容:
- 一个作为输入的整数
limit
你的迭代器应当:
- 从 2 开始生成质数
- 当下一个质数会超过给定上限时,抛出
StopIteration异常
将迭代器实现为一个类,并包含 __iter__() 和 __next__() 方法。使用 __next__() 方法生成下一个质数,并处理 StopIteration 异常。
每行输出一个生成的质数。
输入将以表示整数的字符串形式提供。
亲手试试
# 读取输入
limit = int(input())
class PrimeIterator:
def __init__(self, limit):
self.limit = limit
self.current = 2
def __iter__(self):
return self
def __next__(self):
# TODO:实现生成下一个质数的逻辑
# 如果下一个质数超过 limit,就抛出 StopIteration
# 如果下一个质数不超过 limit,就返回它
pass
# 创建一个 PrimeIterator 实例
prime_iter = PrimeIterator(limit)
# 遍历质数并逐个打印
try:
for prime in prime_iter:
print(prime)
except StopIteration:
pass # 迭代结束Python 迭代器中的所有课
自己练习: Python 在线编译器