![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как убрать сообщения об ошибках [D7, XP]
Ануфрий © (2007-08-03 19:30:00)С некоторых пор Дельфи стал показывать сообщения об ошибках (исключениях), которые пойманы через try.
Т.е. код до этого
try
I := деление на ноль;
finally
end
Приводил к тому, что в режиме отладки дельфи сообщал об ошибке, и после нажатия F9 программа дальше работала. Без дельфи прога вообще ничего не выдавала.
Теперь показывается сообщение дельфи и после F9 вылетает MessageBox.
А если запускать без дельфи, то просто вылетает MessageBox (типа деление на ноль).
Раньше все было нормально, не пойму что случилось и как это убрать.
Anatoly Podgoretsky (2007-08-03 20:23:00) [1]> Ануфрий (03.08.2007 20:10:17) [17]
Вот это грамотный код.
Ануфрий (2007-08-03 20:10:00) [2]Все, спасибо всем, просто заработался.
function GetBody(const URL: string): string;
var
HTTP: TIdHTTP;
Str: string;
begin
Result := '';
HTTP := TIdHTTP.Create(nil);
try
Result := HTTP.Get(' http://my_domain.com');
finally
HTTP.Free;
end;
end;
а далее вызов так
try
S := GetBody(' http://domain.com');
except
S := '';
end;
потому ошибки не было. А когда я начал разбираться с GetBody, видел только finally и это меня смутило, почему вдруг стали ошибки появляться. :)
Anatoly Podgoretsky (2007-08-03 20:08:00) [3]> Anatoly Podgoretsky (03.08.2007 20:01:15) [15]
Хотя бы на
except
on E.Exception do begin
// variable := E.Message
//или
// LOG(llCriticalLevel, 'Ошибка HTTP.Get( http://my_domain.com) = ' + E.Message);
end;
end
Это позволит как минимум поставить точку останова для отладки.
Anatoly Podgoretsky (2007-08-03 20:01:00) [4]> Ануфрий (03.08.2007 19:52:09) [9]
Для данного кода можно написать с одним блоком, но обычно код сложнее и
except
end
Лучше заменить на
except
что то полезное.
end
Инс (2007-08-03 19:58:00) [5]
> [10] Ануфрий (03.08.07 19:56)
Почитай Рихтера, у него отлично механизм исключений расписан.
{RASkov} (2007-08-03 19:58:00) [6]> [9] Ануфрий (03.08.07 19:52)
> Тогда наверное проще заменить на
> var
> HTTP: TIdHTTP;
> Str: string;
> begin
> HTTP := TIdHTTP.Create(nil);
> try
> Str := HTTP.Get(' http://my_domain.com');
> except
> end;
> HTTP.Free;
> end;
> ?
Не верно!
var
HTTP: TIdHTTP;
Str: string;
begin
HTTP := TIdHTTP.Create(nil);
try
try
Str := HTTP.Get(' http://my_domain.com');
except
ShowMessage('Произошла ошибка такая-то');
end;
finally
HTTP.Free;
end;
end;
Инс (2007-08-03 19:57:00) [7]
> Тогда наверное проще заменить на
В данном конкретном случае можно, но вообще лучше 1-й вариант.
Zagaevskiy (2007-08-03 19:57:00) [8]Может ошибок там не было?
Ануфрий (2007-08-03 19:56:00) [9]Посмотрел старый код. Раньше у меня тоже было try finally end. И никогда ошибки на экран не выдавались.
Ануфрий (2007-08-03 19:52:00) [10]Anatoly Podgoretsky
Так нужно делать вложенные try что-ли?
var
HTTP: TIdHTTP;
Str: string;
begin
HTTP := TIdHTTP.Create(nil);
try
try
Str := HTTP.Get(' http://my_domain.com');
except
end;
finally
HTTP.Free;
end;
end;
Тогда наверное проще заменить на
var
HTTP: TIdHTTP;
Str: string;
begin
HTTP := TIdHTTP.Create(nil);
try
Str := HTTP.Get(' http://my_domain.com');
except
end;
HTTP.Free;
end;
?
Ануфрий (2007-08-03 19:49:00) [11]Dib@zol
Спасибо, работает. Хотя я всегда думал, что finally также "поглощает" ошибки, как except, только в отличие от последнего вызывается всегда, даже если ошибок нет. И вроде бы так и работало... Может просто не разу ошибок не попадалось внутри try finally end;
Anatoly Podgoretsky (2007-08-03 19:46:00) [12]> Dib@zol (03.08.2007 19:43:05) [5]
try..finally убирать нельзя, это будет уже другая ошибка дизайна, например утечка как минимум
Anatoly Podgoretsky (2007-08-03 19:45:00) [13]> Ануфрий (03.08.2007 19:42:04) [4]
Чтобы на экран не выдавалось сообщение, исключение надо обработать самому, это блок try except end
Dib@zol (2007-08-03 19:43:00) [14]var
HTTP: TIdHTTP;
Str: string;
begin
HTTP := TIdHTTP.Create(nil);
try
Str := HTTP.Get(' http://my_domain.com');
finally
HTTP.Free;
end;
end;
try..finally заменяй на try..except.
Ануфрий (2007-08-03 19:42:00) [15]Ну тогда другой пример.
var
HTTP: TIdHTTP;
Str: string;
begin
HTTP := TIdHTTP.Create(nil);
try
Str := HTTP.Get(' http://my_domain.com');
finally
HTTP.Free;
end;
end;
При запуске вызывается исключение (сайт не найден). Мне нужно чтобы на экран не выдавалось сообщение с текстом исключения.
Anatoly Podgoretsky (2007-08-03 19:39:00) [16]> Ануфрий (03.08.2007 19:35:02) [2]
В этом примере не делить на ноль.
Ануфрий (2007-08-03 19:35:00) [17]Это пример.
Dib@zol (2007-08-03 19:32:00) [18]А может просто не делить на ноль???Или это просто такой пример?