anext

Функция anext() возвращает следующий элемент асинхронного итератора. Это аналог функции next() для асинхронных контекстов.

Синтаксис

await anext(async_iterator[, default])

Аргументы

  1. async_iterator (обязательный):
    • Что означает: Асинхронный итератор, у которого нужно получить следующий элемент.
    • Возможные значения: Объект, реализующий метод __anext__.
  2. default (необязательный):
    • Что означает: Значение, возвращаемое при окончании итерации (вместо возбуждения StopAsyncIteration).
    • Возможные значения: Любое значение.

Возвращаемое значение

Возвращает следующий элемент асинхронного итератора. Если итератор завершён и указан default, возвращается значение default.

Примеры использования

class AsyncGen:
    async def __aiter__(self):
        for i in range(3):
            yield i

async def main():
    async_gen = aiter(AsyncGen())
    print(await anext(async_gen))  # Вывод: 0
    print(await anext(async_gen))  # Вывод: 1
    print(await anext(async_gen, "конец"))  # Вывод: 2
    print(await anext(async_gen, "конец"))  # Вывод: "конец"

Частые ошибки

  1. Попытка использовать anext() с синхронным итератором:

    await anext(iter([1, 2, 3]))  # Ошибка: TypeError
    

    Как исправить: Используйте только асинхронные итераторы.

  2. Отсутствие обработки StopAsyncIteration:

    async def main():
        async_gen = aiter(AsyncGen())
        print(await anext(async_gen))
        print(await anext(async_gen))
        print(await anext(async_gen))
        print(await anext(async_gen))  # Ошибка: StopAsyncIteration
    

    Как исправить: Укажите параметр default для безопасного завершения.

Часто задаваемые вопросы

  1. Можно ли использовать anext() в синхронном коде? Нет, anext() предназначена только для асинхронного кода.
  2. Что произойдёт, если итератор завершён, а default не указан? Будет исключение StopAsyncIteration.