if...then...raise...怎么用

解决方案 »

  1.   

    简单地说,raise用于引发一个异常,这个异常不一定是系统异常,也可以是自定义的,例如,如果你的某个变量有取值范围限制,当输入值超出这个范围时,你可以使用raise引发一个异常(当然也可以用其它方法处理)。这样做的好处是,可以在应用程序中统一处理异常。
      

  2.   

    舉個例子給你!
    if pos('A',UserRight)=0 then raise exception.Create('對不起,您沒有此權限!');
      

  3.   

    if a=b then
    raise exception.Create('');
      

  4.   

    引发和处理异常
     要创建一个异常对象,应在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)并且异常被再引发。这时异常被捕获和处理,通常通过中断程序。