Небольшой скрипт подсчёта оценки переехал с asyncio.gather на asyncio.TaskGroup, и запасной путь перестал работать. До изменения пустой ответ с весами вызывал ValueError при загрузке, except его ловил, и оценка считалась с весами по умолчанию. После изменения тот же сбой проходит мимо обработчика.
import asyncio
async def fetch_weights():
raise ValueError("weights missing")
async def main():
try:
async with asyncio.TaskGroup() as tg:
tg.create_task(fetch_weights())
except ValueError:
print("fallback weights")
asyncio.run(main())
На 3.13 это ничего не печатает. Трассировка заканчивается на ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception), а ValueError лежит внутри.
Значит, исключение всё-таки дошло. Дошло обёрнутым, хотя упала всего одна задача. Прежде чем трогать обработчик, хочется понять, всегда ли TaskGroup так оборачивает или только когда упасть могут несколько задач.