Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Секция except [D4]


Германн ©   (2009-09-24 01:40:00) 

А разве нет возможности в секции except указать "набор" исключений?
То бишь:
except
 on XXX, YYY, ZZZ
do
?


Германн   (2009-09-25 16:49:00) [1]


> Leonid Troyanovsky ©   (25.09.09 16:38) [16]

В принципе согласен.


Leonid Troyanovsky   (2009-09-25 16:38:00) [2]


> Германн ©   (25.09.09 16:00) [15]

> Никакого смысла. Почти никакого.
> Поэтому я и сказал про except end;

Окончание не то.
Обработчик должен брать только то, на что заточен.
Остальное - пропускать.

Ну, а реакцию на EAccessViolation _надо_ оставлять
обработчику самого верхнего уровня
("Мы, все же, облажались: продолжить/завершить приложение?")

Единственное, что можно позволить нижнему уровню,
добавить от себя префикс: мол, здесь был.

--
Regards, LVT.


Германн   (2009-09-25 16:00:00) [3]


> Игорь Шевченко ©   (25.09.09 10:19) [14]
>
>
> > Ладно так и быть. Переделал так:
>
>
> плохо переделал. Какой смысл в этих действиях при EOutOfMemory,
>  EAccessViolation ?
>

Никакого смысла. Почти никакого.
Поэтому я и сказал про except end;
А на случай непредвиденных исключений я высылаю клиентам спецверсию с Эврикой.


Игорь Шевченко   (2009-09-25 10:19:00) [4]


> Ладно так и быть. Переделал так:


плохо переделал. Какой смысл в этих действиях при EOutOfMemory, EAccessViolation ?


Джо   (2009-09-25 07:35:00) [5]


> Германн ©   (25.09.09 03:23) [12]
> Я просто удивился тому, что секция except имеет много общего
> с секцией case.
> Но она ограничена в возможностях. Но ведь эти секции обрабатывает
> один и тот же компилятор!


Дык, если можно будет указывать on E: X,Y, то потом вызов E.A чего должен делать, если в X есть метод A, а в Y — его нет? :)


Германн   (2009-09-25 03:23:00) [6]

Я просто удивился тому, что секция except имеет много общего с секцией case.
Но она ограничена в возможностях. Но ведь эти секции обрабатывает один и тот же компилятор!


Германн   (2009-09-25 03:16:00) [7]


> Leonid Troyanovsky ©   (24.09.09 18:46) [5]
>
>

+1


Германн   (2009-09-25 02:06:00) [8]


> Игорь Шевченко ©   (24.09.09 20:56) [6]

Ладно так и быть. Переделал так:
       on E : Exception do begin
         Image1.Picture.Graphic:=nil;
         FMain.SaveLog(E,'','FCliList.DataSource1DataChange');
       end;

Хотя и сомневаюсь, что кому-то эта версия потребуется.
:)


Германн   (2009-09-25 00:42:00) [9]


> ты представляешь себе, что с тобой черти в аду после этого
> сделают ?

Не так страшен черт, как его малюют!


Омлет   (2009-09-24 22:19:00) [10]

В except указывай абстрактного предка, который имеет виртуальные методы, реализованные в исключениях-потомках.


Плохиш   (2009-09-24 21:41:00) [11]


> Германн ©   (24.09.09 01:40)
>
> А разве нет возможности в секции except указать "набор"
> исключений?
> То бишь:
> except
>  on XXX, YYY, ZZZ do


except
 on E:Exception do
   if E = XXX then

  else if E = YYY then

 else if E = ZZZ then

 else
    MessageBox('Вау, а енто ещё шо за таке???');
end;

:-)


Игорь Шевченко   (2009-09-24 20:56:00) [12]


> Лучше наверно будет поставить except end;


ты представляешь себе, что с тобой черти в аду после этого сделают ?


Leonid Troyanovsky   (2009-09-24 18:46:00) [13]


> Германн ©   (24.09.09 17:53) [3]

> Разных классов. EInvalideGraphic & EFOpenError

Штирлиц задумался. Ему понравилось.
Штирлиц задумался еще раз.

> Лучше наверно будет поставить except end;

- А нельзя ли последнюю строку взять и выкинуть?
- ...ты чего? Ради этого все и писалось. [ДВ]

--
Regards, LVT.


Юрий Зотов   (2009-09-24 18:43:00) [14]

> Германн ©   (24.09.09 01:40)  

type
 XXX = class(...);
 YYY = class(XXX);
 ZZZ = class(...);

=============

procedure Proc(E: Exception);
begin
 ....
end;

except
 on e1: XXX do // Здесь же будет и YYY
   Proc(e1);  
 on e2: ZZZ do
   Proc(e2);
end;


Германн   (2009-09-24 17:53:00) [15]


> Если исключения разных классов, мне даже трудно представить
> одинаковую их обработку (порядок с проектированием?).

Разных классов. EInvalideGraphic & EFOpenError
Лучше наверно будет поставить except end;
:)


Anatoly Podgoretsky   (2009-09-24 08:52:00) [16]

> Германн  (24.09.2009 01:40:00)  [0]

По вертикали их пиши.


Leonid Troyanovsky   (2009-09-24 07:40:00) [17]


> Германн ©   (24.09.09 01:40)  

> А разве нет возможности в секции except указать "набор"
> исключений?

Если исключения разных классов, мне даже трудно представить
одинаковую их обработку (порядок с проектированием?).
Ну, а если  одного, то, IMHO, достаточно предка.

--
Regards, LVT.


Наверх

Титульная страница Поиск, карта сайта Написать письмо