![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
перехватить конкретный 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]я имею виду чтоб она не вылазила?