Вопрос раскрывает поведение asyncio при ошибках в задачах.
По умолчанию исключение в задаче не влияет на другие. Однако необработанные исключения выводятся в консоль. Для обработки используйте try/except или asyncio.shield().
1. Поведение по умолчанию:
async def failing_task():
raise ValueError("Oops")
async def normal_task():
await asyncio.sleep(1)
print("Выполнено")
async def main():
t1 = asyncio.create_task(failing_task())
t2 = asyncio.create_task(normal_task())
await asyncio.sleep(2) # t2 выполнится несмотря на ошибку в t12. Перехват исключений:
async def safe_task():
try:
await failing_task()
except ValueError:
print("Ошибка перехвачена")Вывод:
Всегда обрабатывайте исключения в задачах явно.