Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.12.13;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.006 c
2-1256244709
Drowsy
2009-10-23 00:51
2009.12.13
BDE Administrator.


15-1255348813
Virgo_Style
2009-10-12 16:00
2009.12.13
ZoneAlarm Pro завтра (13-го) будут бесплатно раздавать


2-1255265933
Alexei
2009-10-11 16:58
2009.12.13
Работа с SynMemo


2-1256283325
Sergey2
2009-10-23 11:35
2009.12.13
insert ряд значений


1-1228049790
Михаил
2008-11-30 15:56
2009.12.13
TChart : BackImage не выводится на принтер.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский