Главная страница
    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.005 c
10-1121666059
YuriS
2005-07-18 09:54
2009.12.13
Borland Socket Server


15-1255088359
Игорь Шевченко
2009-10-09 15:39
2009.12.13
Сломали луну :)


11-1180442897
=BuckLr=
2007-05-29 16:48
2009.12.13
Collapse и USE_MHTOOLTIP


2-1256274351
snowkam
2009-10-23 09:05
2009.12.13
не сохраняются расширения


2-1256289255
JohnLemon
2009-10-23 13:14
2009.12.13
Изменение стандартной иконки exe файла...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский