Цикл while k := next(key_iter)
не останавливается правильно. Повторение вручную с помощью iter
выполняется либо с помощью перехвата StopIteration
:
iterator = iter(some_iterable)
while True:
try:
value = next(iterator)
except StopIteration:
# no more items
, либо путем передачи значения по умолчанию next
, позволяя ему перехватить StopIteration
, а затем проверяя это значение по умолчанию (но вам нужно выбрать значение по умолчанию, которое не будет отображаться в вашей итерации!):
iterator = iter(some_iterable)
while (value := next(iterator, None)) is not None:
# …
# no more items
, но итераторы сами по себе итерируемы, так что вы можете пропустить все это и использовать обычный ol для l oop:
iterator = iter(some_iterable)
for value in iterator:
# …
# no more items
, что в вашем примере выглядит так:
def next_key(d, key):
key_iter = iter(d)
for k in key_iter:
if k == key:
return next(key_iter, None)
return None