anext
Функция anext() возвращает следующий элемент асинхронного итератора. Это аналог функции next() для асинхронных контекстов.
Синтаксис
await anext(async_iterator[, default])
Аргументы
- async_iterator (обязательный):
- Что означает: Асинхронный итератор, у которого нужно получить следующий элемент.
- Возможные значения: Объект, реализующий метод __anext__.
- 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, "конец")) # Вывод: "конец"
Частые ошибки
Попытка использовать anext() с синхронным итератором:
await anext(iter([1, 2, 3])) # Ошибка: TypeError
Как исправить: Используйте только асинхронные итераторы.
Отсутствие обработки 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 для безопасного завершения.
Часто задаваемые вопросы
- Можно ли использовать anext() в синхронном коде? Нет, anext() предназначена только для асинхронного кода.
- Что произойдёт, если итератор завершён, а default не указан? Будет исключение StopAsyncIteration.