Python 3.x: проверка наличия в генераторе оставшихся элементов

Когда я использую генератор в цикле for, кажется, что он «знает», когда больше нет элементов, которые были получены. Теперь я должен использовать генератор без цикла for, и использоватьследующий() вручную, чтобы получить следующий элемент. Моя проблема в том, как я узнаю, что элементов больше нет?

Я знаю только:следующий() вызывает исключение (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 a new iterator to a variable
foobar = foo(bar)

# display generator members
print('--- GENERATOR MEMBERS ---')
print(', '.join(dir(foobar)))

Вывод следующий:

--- TEST A (for loop) ---
abc
123
None
True
456.789

--- TEST B (try-except) ---
abc
123
None
True
456.789

--- GENERATOR MEMBERS ---
__class__, __delattr__, __doc__, __eq__, __format__, __ge__, __getattribute__, __gt__, __hash__, __init__, __iter__, __le__, __lt__, __name__, __ne__, __new__, __next__, __reduce__, __reduce_ex__, __repr__, __setattr__, __sizeof__, __str__, __subclasshook__, close, gi_code, gi_frame, gi_running, send, throw

Спасибо всем, и хорошего дня! :)

Ответы на вопрос(4)

Ваш ответ на вопрос