Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

перехватить конкретный exception [WinXP]


muk ©   (2008-06-03 10:22:00) 

при работе с twebbrowser в определенной ситуации возникает ексепшн "неизвестный аргумент" (EOleException),
ситуация когда возникает ошибка извесна, к сожалению исправлению не подлежит, как обработать (перехватить) именно эту ошибку в программе?


muk   (2008-06-03 19:28:00) [1]

Удалено модератором


muk   (2008-06-03 13:37:00) [2]

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


sniknik   (2008-06-03 11:30:00) [3]

о, блин, сам ошибся
вместо on E: Exceptiondo  надо было on E: EOleExceptiondo


sniknik   (2008-06-03 11:25:00) [4]

> зачем тогда извращения, с большим количеством кода, и путаницей? специально для начинающих?
[7]  в нормальном виде
try
 // код, который может вызвать исключение
except
 on E: Exception do
  if E.ErrorCode <> SOME_ERROR_CODE then
    raise; // если не "наша" ошибка EOleException - восстанавливаем объект  
end;

разве не проще, для понимания и вообще?


Olegz77   (2008-06-03 11:22:00) [5]

Не сообразил сразу как при наличии ON блоков перегенерировать исключения. Так что-ли получается:

try
//...
except
 on E: EOleException do
 begin
   if E.ErrorCode <> SOME_ERROR_CODE then
     raise;
 end;
else
 raise;
end;

т.е. определенную EOleException фильтруем, остальное не трогаем


Olegz77   (2008-06-03 11:11:00) [6]

> Palladin
не будет


Olegz77   (2008-06-03 11:10:00) [7]

Для фильтрования определенной EOleException ошибки, возможно, подойдет свойство ErrorCode класса EOleException. Что-то вроде этого:

try
 // код, который может вызвать исключение
except
 if ExceptObject is EOleException then
 begin
   if EOleException(ExceptObject).ErrorCode = SOME_ERROR_CODE then
   begin
     // ничего не делаем
   end
   else
     raise; // если не "наша" ошибка EOleException - восстанавливаем объект исключения
 end
 else
   raise;
end;

Остается экспериментальным путем определить значение SOME_ERROR_CODE, когда ошибка - "неизвестный аргумент"


Palladin   (2008-06-03 11:09:00) [8]


> Olegz77 ©   (03.06.08 11:01) [4]

для тебя наверное будет это откровением, но есть такая вещь, в блоке try except как, ON, подробности в справке, как правильнонужно фильтровать, а так же смотри ремарку в справке про ExceptObject...


ZENsan   (2008-06-03 11:08:00) [9]


 try

 except
   on E:EOverflow do
     Writeln('overflow');
   on E:EDivByZero do
     Writeln('divbyzero');
   else
     WriteLn('Other exception');
 end;


Olegz77   (2008-06-03 11:01:00) [10]

Этот код будет перехватывать ВСЕ ошибки, которые могут возникнуть в этом блоке кода - не только EOleException. Если надо фильтровать, то так:

try
// код, который может вызвать исключение
except
 if ExceptObject is EOleException then
   // исключение EOleException
 else
   raise; // если нет, восстанавливаем объект исключения
end;


muk   (2008-06-03 10:51:00) [11]

да, спасибо, но это будет перехватывать все ошибки EOleException, или только эту?


Thrasher   (2008-06-03 10:40:00) [12]

Используй конструкцию:

try
// Тут код который может вызвать исключение
except
// Тут код который выполняется если возникло исключение. (если ничего не надо выполнять, то ничего не пиши)
end;


muk   (2008-06-03 10:23:00) [13]

я имею виду чтоб она не вылазила?


Наверх

Титульная страница Поиск, карта сайта Написать письмо