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

Вниз

перехватить конкретный exception   Найти похожие ветки 

 
muk   (2008-06-03 10:22) [0]

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


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

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


 
Thrasher ©   (2008-06-03 10:40) [2]

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

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


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

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


 
Olegz77 ©   (2008-06-03 11:01) [4]

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

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


 
ZENsan ©   (2008-06-03 11:08) [5]


 try

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


 
Palladin ©   (2008-06-03 11:09) [6]


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

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


 
Olegz77 ©   (2008-06-03 11:10) [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, когда ошибка - "неизвестный аргумент"


 
Olegz77 ©   (2008-06-03 11:11) [8]

> Palladin
не будет


 
Olegz77 ©   (2008-06-03 11:22) [9]

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

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

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


 
sniknik ©   (2008-06-03 11:25) [10]

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

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


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

о, блин, сам ошибся
вместо on E: Exception do  надо было on E: EOleException do


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

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


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

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



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

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

Наверх




Память: 0.49 MB
Время: 0.021 c
15-1211209910
Пробегал2...
2008-05-19 19:11
2008.06.29
Скорость движения мыши


2-1212152946
Dmitry
2008-05-30 17:09
2008.06.29
Регулярные выражения


15-1210823680
Slider007
2008-05-15 07:54
2008.06.29
С днем рождения ! 15 мая 2008 четверг


2-1212173582
Hawke
2008-05-30 22:53
2008.06.29
Вопрос по дельфи


2-1212484394
D@nger
2008-06-03 13:13
2008.06.29
MDI окно и хэндл