如何检查是否引发了TIdHTTP异常

时间:2016-04-10 06:46:08

标签: delphi exception delphi-2010 idhttp

我不确定这是否是检查是否引发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 个答案:

答案 0 :(得分:3)

作为一项通用规则:只在您可以并且想要处理它们时才处理异常。

否则让它们只是流动以停止当前执行的代码。在没有任何拦截的情况下,您将收到一个包含异常消息的对话框(由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.