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! :)