Python 3.x: teste se o gerador tem elementos restantes

Quando eu uso um gerador em um loop for, parece "saber" quando não há mais elementos produzidos. Agora, eu tenho que usar um gerador SEM um loop for e usarPróxim () manualmente, para obter o próximo elemento. Meu problema é: como sei se não há mais elementos?

Eu sei apenas:Próxim () gera uma exceção (StopIteration), se não sobrar nada, MAS não é uma exceção um pouco "pesada" demais para um problema tão simples? Não existe um método como has_next() ou então

As linhas a seguir devem esclarecer o que quero dizer:

#!/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)))

A saída é a seguinte:

--- 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

Obrigado a todos e tenham um bom dia! :)

questionAnswers(4)

yourAnswerToTheQuestion