Ознакомление с некоторыми новыми взглядами на стиль в Python и переход к переходу с StopIteration
на return
в генераторах.Мой главный вопрос, как именно это должно работать в собственном генераторе.У меня есть класс, где я переписываю метод __next__
напрямую, так как есть некоторая логика, которую я должен добавить для генерации трека.
Ниже довольно близко к тому, что я делаю, естьвсе критические элементы.Обратите внимание, что я на самом деле не просто создаю генератор, который реплицирует список, я просто делаю это минимальным примером.
class Test():
items = <list>
def __init__(self):
self.index = 0
def __next__(self):
if self.index >= len(self.items):
raise StopIteration
value = self.items[self.index]
self.index += 1
return value
def reset(self):
self.index = 0
Так что в таком случае я перебираю список, пока он не исчерпан, а затемнисходящие вызовы решат, сбросить ли генератор или продолжить после того, как он исчерпан.Тем не менее, как я могу включить что-то подобное без использования StopIteration
, поскольку это устарело?Стандартный совет по использованию return
здесь для поднятия StopIteration
, похоже, не применим, и я бы действительно не хотел менять нисходящий код для проверки генератора, дающего Nones
Так что же ядолжен делать здесь?StopIteration
исключения все еще допустимы в __next__
?