Текущий архив: 2007.08.26;
Скачать: CL | DM;
ВнизКак убрать сообщения об ошибках Найти похожие ветки
← →
Ануфрий (2007-08-03 19:30) [0]С некоторых пор Дельфи стал показывать сообщения об ошибках (исключениях), которые пойманы через try.
Т.е. код до этого
try
I := деление на ноль;
finally
end
Приводил к тому, что в режиме отладки дельфи сообщал об ошибке, и после нажатия F9 программа дальше работала. Без дельфи прога вообще ничего не выдавала.
Теперь показывается сообщение дельфи и после F9 вылетает MessageBox.
А если запускать без дельфи, то просто вылетает MessageBox (типа деление на ноль).
Раньше все было нормально, не пойму что случилось и как это убрать.
← →
Dib@zol © (2007-08-03 19:32) [1]А может просто не делить на ноль??? Или это просто такой пример?
← →
Ануфрий (2007-08-03 19:35) [2]Это пример.
← →
Anatoly Podgoretsky © (2007-08-03 19:39) [3]> Ануфрий (03.08.2007 19:35:02) [2]
В этом примере не делить на ноль.
← →
Ануфрий (2007-08-03 19:42) [4]Ну тогда другой пример.
var
HTTP: TIdHTTP;
Str: string;
begin
HTTP := TIdHTTP.Create(nil);
try
Str := HTTP.Get("http://my_domain.com");
finally
HTTP.Free;
end;
end;
При запуске вызывается исключение (сайт не найден). Мне нужно чтобы на экран не выдавалось сообщение с текстом исключения.
← →
Dib@zol © (2007-08-03 19:43) [5]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.
← →
Anatoly Podgoretsky © (2007-08-03 19:45) [6]> Ануфрий (03.08.2007 19:42:04) [4]
Чтобы на экран не выдавалось сообщение, исключение надо обработать самому, это блок try except end
← →
Anatoly Podgoretsky © (2007-08-03 19:46) [7]> Dib@zol (03.08.2007 19:43:05) [5]
try..finally убирать нельзя, это будет уже другая ошибка дизайна, например утечка как минимум
← →
Ануфрий (2007-08-03 19:49) [8]Dib@zol
Спасибо, работает. Хотя я всегда думал, что finally также "поглощает" ошибки, как except, только в отличие от последнего вызывается всегда, даже если ошибок нет. И вроде бы так и работало... Может просто не разу ошибок не попадалось внутри try finally end;
← →
Ануфрий (2007-08-03 19:52) [9]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:56) [10]Посмотрел старый код. Раньше у меня тоже было try finally end. И никогда ошибки на экран не выдавались.
← →
Zagaevskiy © (2007-08-03 19:57) [11]Может ошибок там не было?
← →
Инс © (2007-08-03 19:57) [12]
> Тогда наверное проще заменить на
В данном конкретном случае можно, но вообще лучше 1-й вариант.
← →
{RASkov} © (2007-08-03 19:58) [13]> [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:58) [14]
> [10] Ануфрий (03.08.07 19:56)
Почитай Рихтера, у него отлично механизм исключений расписан.
← →
Anatoly Podgoretsky © (2007-08-03 20:01) [15]> Ануфрий (03.08.2007 19:52:09) [9]
Для данного кода можно написать с одним блоком, но обычно код сложнее и
except
end
Лучше заменить на
except
что то полезное.
end
← →
Anatoly Podgoretsky © (2007-08-03 20:08) [16]> 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
Это позволит как минимум поставить точку останова для отладки.
← →
Ануфрий (2007-08-03 20:10) [17]Все, спасибо всем, просто заработался.
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:23) [18]> Ануфрий (03.08.2007 20:10:17) [17]
Вот это грамотный код.
Страницы: 1 вся ветка
Текущий архив: 2007.08.26;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.043 c