Python 3.x 没有循环时如何通过stopiteration。
我写了这段代码,这是一个生成器函数,它在输入的iterable序列上循环,一次生成一个元素,但跳过重复的元素。 然后打印出来Python 3.x 没有循环时如何通过stopiteration。,python-3.x,Python 3.x,我写了这段代码,这是一个生成器函数,它在输入的iterable序列上循环,一次生成一个元素,但跳过重复的元素。 然后打印出来 seen = set() for n in iterable: if n not in seen: seen.add(n) yield n numbers = [4, 5, 2, 6, 2, 3, 5, 8] nums = unique(numbers) print(next(nums)) print
seen = set()
for n in iterable:
if n not in seen:
seen.add(n)
yield n
numbers = [4, 5, 2, 6, 2, 3, 5, 8]
nums = unique(numbers)
print(next(nums))
print(next(nums))
print(next(nums))
print(next(nums))
print(next(nums))
print(next(nums))
print(next(nums))
things = unique(['dog', 'cat', 'bird', 'cat', 'fish'])
print(next(things))
print(next(things))
print(next(things))
print(next(things))
在打印(next(nums))之后,有一个stopiteration,我可以接受,并且是预期的。我的问题是如何克服这一点,进入动物名单
我的第二个问题是,是否有任何方法可以在不创建列表和返回值的情况下编写此代码 您可以将
None
作为第二个参数传递给next
,这样next
将返回None
作为默认值,这样您就可以将迭代编写为循环,并在迭代器耗尽时使其中断循环
while True:
num = next(nums, None)
if num is None:
break
print(num)
或者,您可以在try
块中捕获异常:
while True:
try:
print(next(nums))
except StopIteration:
break
(另外:请每个帖子只问1个问题。)可能的重复(不是真的,但我找不到更好的规范副本)如果你看下面的答案,代码块在我的代码中的什么位置才能起作用?这也是另一种方法。还不错。我该把这个街区放在哪里呢。在定义数字之前,我把它放在正确的位置,得到了一个ValueError:generatorexecuting@user10019227挑战的核心思想是使用
next(nums,None)
,这样它就不会抛出错误,然后您自己处理它。你必须自己处理。@user10019227我写的是用来替换你所有的print(next(nums))
语句的。把它放在数字定义之前是没有意义的,因为它是基于这些数字的。