Главная страница
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.04 c
10-1147412969
kmi
2006-05-12 09:49
2008.06.29
Печать документа в Word


2-1212121612
Dymok
2008-05-30 08:26
2008.06.29
Как узнать путь к каталогу документов пользователя


15-1210851293
Marij
2008-05-15 15:34
2008.06.29
PageControl


15-1211205462
Ломброзо
2008-05-19 17:57
2008.06.29
Как крякнуть IE


2-1212122243
кот
2008-05-30 08:37
2008.06.29
Числовое значение символа.