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

Вниз

Вопрос по исключениям   Найти похожие ветки 

 
Nucer   (2009-10-22 15:28) [0]

Всегда ли будет срабатывать блок "on E: Exception"? Или есть случаи, когда сообщение будет отображено только во втором варианте?

try
...
except
on E: Exception do
begin
if E.Message <> "" then ShowMessage(E.Message) else ShowMessage("Exception");
end;
end;


try
...
except
ShowMessage("Exception");
end;


 
Сергей М. ©   (2009-10-22 15:37) [1]

Всегда.


 
Медвежонок Пятачок ©   (2009-10-22 15:37) [2]

аборт например


 
Ухарь   (2009-10-22 15:41) [3]

у аборта мессадж не пустой


 
Сергей М. ©   (2009-10-22 15:44) [4]


> аборт например


EAbort есть наследник Exception и ловится в except-блоке точно так же как и иные дельфийские Exception-объекты.


 
Медвежонок Пятачок ©   (2009-10-22 15:44) [5]

у аборта его нет вообще. "тихое" исключение


 
Медвежонок Пятачок ©   (2009-10-22 15:46) [6]

пардон. конечно если его не обрабатывать :)


 
Сергей М. ©   (2009-10-22 15:46) [7]


> у аборта мессадж не пустой


А причем здесь пустота ?
Сообщение-то все равно будет и в том и в другом случае, хоть пустое хоть непустое


 
Медвежонок Пятачок ©   (2009-10-22 15:49) [8]

Я про другое.
Аборт мог вызвать другой программист.  С умыслом вызвать или по недомыслию. Например вместо Exit

И он допустим не ожидает что кто-то будет его перехватывать.


 
Сергей М. ©   (2009-10-22 15:52) [9]


> он допустим не ожидает что кто-то будет его перехватывать


А это уже драма того кто его перехватил и с умыслом или по недомыслию не ре-райзит его


 
Nucer   (2009-10-22 15:56) [10]

Спасибо за ответы.

Еще один вопрос.
try
...
except
on E: ETest do
begin
ShowMessage("ETest");
end;
ShowMessage("Exception"); //Для всех исключений (в том числе ETest)
end;


Неужели такой синтаксис не предусмотрен?


 
Сергей М. ©   (2009-10-22 16:00) [11]

If the exception block specifies an else clause, the else clause handles any exceptions that aren"t handled by the block"s exception handlers. For example,

try
...
except
 on EZeroDivide do HandleZeroDivide;
 on EOverflow do HandleOverflow;
 on EMathError do HandleMathError;
else
 HandleAllOthers;
end;


 
Nucer   (2009-10-22 16:04) [12]

Нужен не else, а код для всех исключений (в том числе тех, которые были обработаны отдельно).

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


 
Anatoly Podgoretsky ©   (2009-10-22 16:14) [13]

> Nucer  (22.10.2009 15:28:00)  [0]

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


 
Сергей М. ©   (2009-10-22 16:24) [14]

Так устроит

type
 EMyException1 = class(Exception);
 EMyException2 = class(Exception);
 EMyException3 = class(Exception);

procedure TForm1.Button6Click(Sender: TObject);

begin

try
 raise EMyException3.Create("");
except
 on e:Exception do begin
   if e is EMyException1 then ShowMessage("Exception EMyException1 trapped")
   else if e is EMyException2 then ShowMessage("Exception EMyException2 trapped")
   else if e is EMyException3 then ShowMessage("Exception EMyException3 trapped");
   ShowMessage("Handling any exceptions, currently exception class is " + e.ClassName);
 end;
end;


?


 
Nucer   (2009-10-22 16:29) [15]


> Всегда будут срабатывать оба, сначала первое, а потом второе,
>  если конечно будет исключение.

Вы не так поняли. Это два отдельных варианта обработки исключений, а не код из одной функции. Я имел ввиду, может ли блок "on E: Exception do" пропустить часть исключений из тех, что попали бы в обычный блок except end.
Если сформулировать иначе, то возможен ли случай, когда будет отображено сообщение else:
try
...
except
on Exception do ShowMessage("Exception");
else ShowMessage("else");
end;


 
Nucer   (2009-10-22 16:32) [16]


> Сергей М. ©   (22.10.09 16:24) [14]

Да, спасибо большое, именно это и надо было.


 
Сергей М. ©   (2009-10-22 16:34) [17]

Нет, не возможен.
Все дельфийские объекты-исключения имеют либо класс Exception либо класс-наследник класса Exception.
Так что ловушку on Exception do не должно миновать ни одно исключение.



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

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

Наверх




Память: 0.5 MB
Время: 0.018 c
6-1207912827
Juri
2008-04-11 15:20
2009.12.13
SOAP


2-1256199231
Sw
2009-10-22 12:13
2009.12.13
Combobox Цвет поля и цвет списка


1-1228486156
istok2
2008-12-05 17:09
2009.12.13
AV в обработчике сообщений...


15-1255362228
Alexio
2009-10-12 19:43
2009.12.13
Ошибки страниц


15-1255814375
sniknik
2009-10-18 01:19
2009.12.13
Тем кто пользуется браузером Mozilla Firefox полезная ссылка