delphi 异常处理  
官方Delphi 学习QQ群: 682628230(三千人)
频道

delphi 异常处理


异常处理

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