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

Я это к чему: пилю я тут на aiohttp+asyncio питоновскую приложеньку с корутинами. И вот уперся в дилемму: ловить-пробрасывать исключения в корутинах задача не самая приятная, да и глючить, говорят, может.
Насколько имеет смысл в Питоне эмулировать Го-стайл возврат и вместо кидания своего исключения или при поимке чужого аккуратно возвращать пару результат-ошибка?

(no subject)

Date: 2020-04-21 05:32 pm (UTC)
From: [personal profile] malobukov
Я по умолчанию использую C-style, если только язык и библиотеки не требуют другого подхода. Считаю, что достоинства перевешивают недостатки. Знаю, что такая точка зрения нонче непопулярна и единственно верным считается Go-style.
Page generated Feb. 27th, 2026 04:06 am
Powered by Dreamwidth Studios