delphi raise 语句: 抛出异常

转载 2013年12月03日 16:24:32
//例1:
begin
  raise Exception.Create('抛出异常');
end;
//例2:
begin
  raise Exception.CreateFmt('%s %d', ['错误代码:', 999]);
end;


//例3:
var
  exc: Exception;
begin
  exc := Exception.Create('发现异常');
  raise exc;

end;


引发和处理异常
 

要创建一个异常对象,应在raise语句中调用异常类的构造器,如

raise EMathError.Create;

一般情况下,raise具有如下形式

raise object at address

这里的object和at address都是可选的。如果object被省略,那么语句将再引发当前异常(见再引发异常)。当某个address被指定时,通常是一个指向过程或函数的指针;利用该选项可以从堆栈中较早的点(与错误实际发生的点比较)引发异常。

异常被引发,即异常在raise语句中被引用时,异常由特殊的异常处理逻辑来管理。通常,raise语句从不返回控制。取而代之的是,它把控制传递到最内层的异常处理程序,该处理程序能处理给定类的异常。(最内层的处理程序就是一个try...except块中尚未退出的最近入口。)

例如,下面的函数把一个串转换为整数,如果结果在指定范围之外则引发一个ERangeError异常。

function StrToIntRange(const S: string; Min, Max: Longint): Longint;

begin

  Result := StrToInt(S);  // StrToInt函数在SysUtils单元中定义

  if (Result < Min) or (Result > Max) then

    raise ERangeError.CreateFmt(

      '%d is not within the valid range of %d..%d',

      [Result, Min, Max]);

end;

可以注意到,在raise语句中调用的是CreateFmt方法。Exception类及其后裔类拥有特殊的构造器,为创建异常消息和环境ID提供多于一种途径。

引发的异常在其处理后自动销毁,决不要试图人为销毁一个引发的异常。

注意:单元的初始化节中引发异常不能达到预期的结果。一般的异常支持来自SysUtils单元,在异常支持可用之前该单元必需被初始化。如果一个异常在初始化过程中发生,那么包括SysUtils单元在内所有初始化过的单元,都会被结束(finalized)并且异常被再引发。这时异常被捕获和处理,通常通过中断程序。

相关文章推荐

java异常处理之throw, throws,try和catch

    程序运行过程中可能会出现异常情况,比如被0除、对负数计算平方根等,还有可能会出现致命的错误,比如内存不足,磁盘损坏无法读取文件等,对于异常和错误情况的处理,统称为异常处理。    Java异常...

delphi raise 语句: 抛出异常

//例1: begin   raise Exception.Create('抛出异常'); end; //例2: begin   raise Exception.CreateFmt('%s ...

Delphi学习之Raise(抛出异常)

Raise是用来抛出异常的! constructor TBaseFactory.Create(const IID: TGUID); begin if FactoryManager.Exists(...

Delphi 异常处理 详解

[1] Exception类的定义在SysUtils单元中。 [2] Delphi也支持不从Exception继承的异常类,但是我觉得这么做并不十分的明智。 一、异常的来源   在Delphi的...

delphi 类的写法 和 控制台程序的制作---深入Delphi编程 数据库

2、数据库      在相对枯燥的理论之后,我们终于要开始接触到一些比较激动人心的实际应用了。   数据库编程是Delphi最强大的优势之一,恐怕也很少有Delphi程序员没有接触过数据库编程的...

DataSnap客户端共享服务器端的数据库连接

客户端的一个连接(SQLConnection)能够共享服务器方法对数据库的访问连接。这样就可以做到一个客户端连接唯一关联服务器端的一条数据库连接;通过该共享连接,在客户端可以直接执行数据库的SQL语句...
  • ddqqyy
  • ddqqyy
  • 2012年09月28日 14:36
  • 3884

oracle存储过程抛出异常之RAISE和RAISE_APPLICATION_ERROR

RAISE E_EXCEPTION和RAISE_APPLICATION_ERROR比较,User-defined Exception的解决。

java异常抛出

  • 2015年12月01日 17:16
  • 981B
  • 下载

throw 是语句抛出一个异常;throws 是方法抛出一个异常

区别一:             throw 是语句抛出一个异常;throws 是方法抛出一个异常;              throw语法:throw              ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:delphi raise 语句: 抛出异常
举报原因:
原因补充:

(最多只允许输入30个字)