Форум: "Начинающим";
Текущий архив: 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