Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.08;
Скачать: CL | DM;

Вниз

Секция except   Найти похожие ветки 

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

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


 
Leonid Troyanovsky ©   (2009-09-24 07:40) [1]


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

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

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

--
Regards, LVT.


 
Anatoly Podgoretsky ©   (2009-09-24 08:52) [2]

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

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


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


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

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


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

> Германн ©   (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;


 
Leonid Troyanovsky ©   (2009-09-24 18:46) [5]


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

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

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

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

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

--
Regards, LVT.


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


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


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


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


> Германн ©   (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 22:19) [8]

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


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


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

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


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


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

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

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


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


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

+1


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

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


 
Джо ©   (2009-09-25 07:35) [13]


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


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


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


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


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


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


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

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


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


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

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

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

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

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

--
Regards, LVT.


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


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

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



Страницы: 1 вся ветка

Текущий архив: 2009.11.08;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.015 c
2-1253656832
redlord
2009-09-23 02:00
2009.11.08
ansistring


15-1252052592
Kerk
2009-09-04 12:23
2009.11.08
Войнушка программ. "Вирусы"


6-1191102532
FearG0
2007-09-30 01:48
2009.11.08
Оценить поток на основе TClientSocket


15-1252512460
Kostafey
2009-09-09 20:07
2009.11.08
Синхронизация Mercurial-репозитариев с ограничением


15-1252640404
Дмитрий С
2009-09-11 07:40
2009.11.08
Символ неразрывного пробела