Apr. 21st, 2020

elglin: (Default)
Есть условно три стиля обработки ошибок.
1. C-style, он же код возврата. Возвращаем недопустимое значение (обычно 0 или -1 или NULL), если операция провалилась. Недостаток - осмысленное описание ошибки не передать. Достоинства: дешево и быстро.
2. Python-style, он же "кидаться исключениями". Возвращается только успех, при ошибке кидается исключение. Недостатки: исключения дороже, нетривиальнее, очень странно ловятся во всяких корутинах, сложно вернуть одновременно нормальный ответ. Достоинства: просто пишется.
3. Go-style, или "да здравствует тупл". Возвращается всегда пара (ответ, ошибка). Если ошибка NULL, то случился успех. Недостатки: более медленный возврат в неприспособленных к этому языках (сиречь не Go), необходимость постоянно работать с туплом/парой в возврате (это некрасиво). Достоинства: детерминированное исполнение без разлета исключений при сохранении развесистой ошибки.

Я это к чему: пилю я тут на aiohttp+asyncio питоновскую приложеньку с корутинами. И вот уперся в дилемму: ловить-пробрасывать исключения в корутинах задача не самая приятная, да и глючить, говорят, может.
Насколько имеет смысл в Питоне эмулировать Го-стайл возврат и вместо кидания своего исключения или при поимке чужого аккуратно возвращать пару результат-ошибка?
Page generated Jul. 1st, 2025 12:49 am
Powered by Dreamwidth Studios