![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| Logo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 3 Всего: 10 |
Есть ли какой нибудь общепризнанный базовый класс-исключение для Perl, для создания объектов-исключений? Как вообще нужно работать с исключениями?
|
|||
|
||||
| vadiml |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 27.7.2007 Репутация: 5 Всего: 7 |
Всё что я видел фактически использовало что-то типа
eval{ # разный код die 'error1'; }; if ( $@ && $@ eq 'error1' ) { наша ошибка } elsif ( $@ ) { неизвестная ошибка } Но если очень хочется класс, поищите на сpan-е по "exeption" |
|||
|
||||
| Logo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 3 Всего: 10 |
Вообще язык позволяет нечто вроде:
Но конкретных примеров как с этим работать в кемелбуке нету. И, возможно есть устоявшися базовый класс для обьектов исключений? Это сообщение отредактировал(а) Logo - 20.2.2010, 15:23 |
|||
|
||||
| mvsgt |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 209 Регистрация: 27.3.2009 Репутация: 1 Всего: 1 |
Так всё просто. die возвращает либо просто строку, либо объект. Если объект - анализируете его тип.
Конкретных примеров в CPAN много. http://search.cpan.org/search?query=except...amp;mode=module |
|||
|
||||
| Logo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 3 Всего: 10 |
У меня есть класс, с которым связано 3 основных типа ошибок. Должен ли я на каждый тип ошибки создать свой класс исключения, или создать один класс со свойством type?
|
|||
|
||||
| DurRandir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 335 Регистрация: 27.9.2009 Репутация: 14 Всего: 17 |
1. Общепринятого - нет. Как и общепринятого try/catch модуля.
2. eval{...} + if ($@) - это плохо. Если по результатам eval будет вызван деструктор для созданного внутри объекта, то в $@ может быть далеко не то, что ожидается. Гораздо лучше отлавливать ошибку как-то так: eval{...; 1} or do {...} Я лично, если решаю в скрипте ловить исключения, делаю для каждого свой класс, наследующий от Exception::Class::Base с переопределённым _initialize. |
|||
|
||||
| Logo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 3 Всего: 10 |
Попробовал Exception::Class::Base. Он почему-то выводит на STDERR ошибку без номера строки. Пришлось дорабатывать напильником:
Это нормально, или надо просто опцию какую-то включить? Еще попробовал Exception::Base. Какой класс лучше использовать, Exception::Base или Exception::Class::Base? |
|||
|
||||
| sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 14 Всего: 31 |
вроде Error наиболее популярный.
Кстати могу предостеречь вас от одно ошибки.. В конструкциях вида
нужно всегда ставить точку с запятой в конце. т.к. try - это вызов функции, catch - тоже. а последний блок - на самом деле просто аргумент функции. если не поставить точку с запятой - catch может прихватить следующее выражение как аргумент. Это приводит к ошибкам. Просто кошмарным =) |
|||
|
||||
| Logo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 694 Регистрация: 22.7.2008 Репутация: 3 Всего: 10 |
Класс исключений в Error простоват.
Остановился на Exception::Base. |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |