finally块中的异常

时间:2017-10-06 10:42:10

标签: delphi delphi-xe6

如果在finally代码块中引发异常,那么finally块的其余部分是否已执行?

critical_command

{{1}}会被执行吗?

Manual仅讨论异常,而不是代码的执行:

  

如果引发异常但未在finally子句中处理,则该异常将从try ... finally语句中传播出来,并且try子句中已经引发的任何异常都将丢失。因此,finally子句应该处理所有本地引发的异常,以免干扰其他异常的传播。

1 个答案:

答案 0 :(得分:2)

请参阅以下确认

procedure TForm6.Button1Click(Sender: TObject);
begin

  try
    showmessage('begin');
  finally
    showmessage('enter');
    raise Exception.Create('raise');
    showmessage('end');
  end;

end;

现在针对这种情况

procedure RaiseAndContinue;
begin
  try
    raise Exception.Create('raise');
  except

  end;
end;

procedure TForm6.Button1Click(Sender: TObject);
begin

  try
    showmessage('begin');
  finally
    showmessage('enter');
    RaiseAndContinue;
    showmessage('end');
  end;

end;

简短回答除非您处理该异常,否则代码将不会被执行。