Python 3.x 没有循环时如何通过stopiteration。

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

我写了这段代码,这是一个生成器函数,它在输入的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(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))
语句的。把它放在数字定义之前是没有意义的,因为它是基于这些数字的。