如果在finally代码块中引发异常,那么finally块的其余部分是否已执行?
critical_command
{{1}}会被执行吗?
Manual仅讨论异常,而不是代码的执行:
如果引发异常但未在finally子句中处理,则该异常将从try ... finally语句中传播出来,并且try子句中已经引发的任何异常都将丢失。因此,finally子句应该处理所有本地引发的异常,以免干扰其他异常的传播。
答案 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;
简短回答除非您处理该异常,否则否代码将不会被执行。