Как проверить, возникает ли исключение TIdHTTP

Я не уверен, что это лучший способ проверить, возникает ли исключение TIdHTTP, вот что я сделал:

HTTP := TIDHttp.Create(nil);
try
  try
    HTTP.Head(URL);
    SizeF := HTTP.Response.ContentLength;
    code := HTTP.ResponseCode;
  except
    on E: Exception do
    begin
      code := HTTP.ResponseCode;
      ShowMessage(IntToStr(code));
    end;
 end;
finally
  HTTP.Free;
end;
if code = 200 then
  // go download the file using multiple threads.

То, чего я хочу достичь, - это поднять точку зрения, если она есть (я думаю, я уже сделал), иначе программа продолжит работу и загрузит файл. Так это правильный способ сделать это? Спасибо за ваши ответы.

1 ответ

Как правило: обрабатывать исключения можно только тогда, когда вы можете и хотите их обрабатывать.

В противном случае пусть они просто текут, чтобы остановить текущее выполнение вашего кода. Без какого-либо перехвата вы просто получите диалог с сообщением об исключении (это обрабатывается TApplication).

В этом случае вы можете изменить свой код на

HTTP := TIDHttp.Create(nil);
try
  HTTP.Head(URL); 
  // if an exception is raised then the rest of the code will not be executed 
  // yes, the code in finally part will execute 
  SizeF := HTTP.Response.ContentLength;
  code := HTTP.ResponseCode;
finally
  HTTP.Free;
end;

// check if all conditions are met
if code <> 200 then
  // if not, raise a custom exception as you like
  raise Exception.Create( 'Not what I expected here' );

// go download the file using multiple threads.
Другие вопросы по тегам