从finally块中,是否有可能告诉异常已被提出?
答案 0 :(得分:18)
您可以检查是否已分配ExceptObject或ExceptAddr。 在VCL来源中,这是为了考试。在GIFImg.pas或jpeg.pas。
以下代码应输出
ExceptObject<>零
ExceptObject = nil
如果你删除了例外当然
ExceptObject = nil
ExceptObject = nil
try
try
raise Exception.Create('Just an exception');
finally
if ExceptObject <> nil then
WriteLn('ExceptObject <> nil')
else
WriteLn('ExceptObject = nil');
end;
except
end;
if ExceptObject <> nil then
WriteLn('ExceptObject <> nil')
else
WriteLn('ExceptObject = nil');
答案 1 :(得分:3)
这有点像黑客攻击,但您可以尝试调用AcquireExceptionObject。如果你处于异常状态,你将得到一个返回值,否则你将得到零。
(如果你确实得到了一个,请确保之后调用ReleaseExceptionObject。)
答案 2 :(得分:2)
AFAIK这只能通过嵌套的try语句来实现:
Try
Try
...
Except
...
End;
Finally
...
End