[Moscow.pm] А как вы бросаете исключения?

Ilya Chesnokov chesnokov.ilya на gmail.com
Вт Авг 21 04:06:54 PDT 2012


21 августа 2012 г., 14:54 пользователь Иван Бессарабов
<ivan на bessarabov.ru> написал:
> В книге [Perl Best Practices ][1] есть глава Error Handling, где Damian Conway
> очень подробно рассуждает об исключениях. Он приходит к идеи что стоит
> создавать иерархии исключений с помощью [Exception::Class][2].
>
>  [1]: http://shop.oreilly.com/product/9780596001735.do
>  [2]: https://metacpan.org/module/Exception::Class
>
> Иерархия исключений — это здорово, но иногда сильно избыточно. Perl die крут
> тем что в качестве параметра он принимает скаляр, что позволяет
> запихнуть в $@ объект (именно так и работает Exception::Class и другие
> подобные модули) или же запихнуть в $@ ссылку на что-нибудь.
>
> Так что, можно рассмотреть в качестве варианта кидать исключения как-то так:
>
>     die { error_number => 123, error_text => 'login failed' };

Ага, мы сейчас в нашем API примерно так и делаем. Только принципиально
не используем читабельные тексты, т.к. API предназначено для
автоматизированной обработки. Т.е. подобная ошибка выглядела бы так:
{ error => { login_failed => 1 } };

Правда, это довольно неудобно отлаживать, т.к. когда запускаешь в
консоли (или в тесте) что-то вроде:

perl -MMy::Module -E '...',

а получаешь в ответ:

HASH(0x2639de8),

то приходится добавлять дополнительные проверки, вывод ошибки через
Data::Dumper и т.д.

-- 
Best regards,
Ilya Chesnokov


Подробная информация о списке рассылки Moscow-pm