异常处理
Delphi 中的异常处理非常重要,因为在所有编程语言中,Object Pascal 中的异常处理指令是 Try /Finally 和 Try/Except。
当我们的程序在执行过程中发生错误时,会产生我们称之为异常的东西,这意味着会创建一个异常类型的对象,并将堆栈指针放在引发异常的第一个点。异常对象包含我们可以使用的有关错误的所有信息。
基本上,Try的功能是强制正在运行的程序在产生错误后不要突然终止,而是捕获它并执行另一个应该以某种方式解决或处理所述错误的指令块,获取所有信息关于错误。相同。
Try指令有3种使用方式,让我们分别看看:
尝试异常结束
Try
Statement
{Statement...}
Except
Statement
{Statement...}
End;
在这种使用模式下,只有在Try子句中产生异常时,才会执行在except子句中找到的代码块。这用于在意外导致错误时采取替代操作。但是,Except子句无法确定发生了什么类型的错误。
例子:
var
vResultado: double;
...
try
vResultado := 10 / 0;
except
showmessage('No se puede dividor por cero.');
end;
尝试异常结束
Try
Statement
{Statement...}
Except
On {Name :} Exception type Do
Statement
{Else Statement}
End;
此用法与前面的示例相同,但不同之处在于它可以捕获产生的错误类型及其所有信息。
当Try块内抛出异常时,将执行Exception内的代码块,就像前面的示例一样。但在这种情况下,将创建一个Exception类型的Name对象,我们将在其中获得所有错误信息,如以下示例所示:
var
vResultado: double;
...
try
vResultado := 10 / 0;
except
On E: Exception do
begin
showmessage('Error: ' + E.ClassName + ' ' + E.Message);
end;
end;
在E: C Exception 中, E 是指向错误创建的Exception的指针。E.ClassName 提供异常类型,如'EDivByZero',E.Message 提供错误信息给用户。
尝试最后结束
在使用中的这种模式尝试声明,没有错误类型被抓,只有最后的语句是保证绝对不管在什么情况执行尝试条款。
基本上结束块Try的执行,强制执行块finally。一个明显的例子是我们必须从内存中删除在运行时创建的对象以避免内存泄漏,如下例所示:
var
vQuery: TFDQuery;
...
try
try
vQuery := TFDQuery.Create();
with vQuery do
begin
Close;
SQL.Clear;
SQL.Add('Select * from Table');
Open;
end;
except
on E: Exception do
begin
ShowMessage('Error: ' + E.ClassName + ' ' + E.Message);
end;
end;
finally
FreeAndNil(vQuery);
end;
Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号
执行时间: 0.032171964645386 seconds