小编mad*_*ada的帖子

Python 3.x:测试生成器是否剩余元素

当我在for循环中使用生成器时,它似乎"知道",当没有更多元素产生时.现在,我必须使用没有for循环的生成器,并手动使用next()来获取下一个元素.我的问题是,我怎么知道,如果没有更多的元素?

我只知道:next()引发一个异常(StopIteration),如果没有剩下的东西,那么对于这样一个简单的问题来说,这不是一个例外吗?是不是像has_next()那样的方法?

以下几行应该说清楚,我的意思是:

#!/usr/bin/python3

# define a list of some objects
bar = ['abc', 123, None, True, 456.789]

# our primitive generator
def foo(bar):
    for b in bar:
        yield b

# iterate, using the generator above
print('--- TEST A (for loop) ---')
for baz in foo(bar):
    print(baz)
print()

# assign a new iterator to a variable
foobar = foo(bar)

print('--- TEST B (try-except) ---')
while True:
    try:
        print(foobar.__next__())
    except StopIteration:
        break
print()

# assign …
Run Code Online (Sandbox Code Playgroud)

iteration yield generator next python-3.x

17
推荐指数
4
解决办法
9169
查看次数

标签 统计

generator ×1

iteration ×1

next ×1

python-3.x ×1

yield ×1