异常处理

一、异常的来源

  程序开发过程中,有编译期错误和运行期错误,编译期错误很容易发现,而运行期错误(逻辑错误和异常)往往很难预料。为了程序的稳定性和可靠性,就需要对程序异常处理和保护。
  异常:理解为一种特殊的事件,该事件发生时,程序的正常执行将被打断.由程序导致的不正常情况是错误而不是异常,程序错误与异常不是相同的概念。异常是为方便用户报告错误并处理错误而创建的机制,一般是由操作系统完成的。
  在Delphi的应用程序中,下列的情况都比较有可能产生异常。  

(1)文件处理  
(2)内存分配  
(3)Windows资源 
(4)运行时创建对象和窗体  
(5)硬件和操作系统冲突

二、异常的处理

(1)try…except…end;
try      //尝试执行   
   {SomeCode}      
except   //出错的时候执行, Except有特定的错误类型    
   {SomeCode}      
end;   
(2)try…finally…end;
try     //尝试执行   
   {SomeCode}      
finally //无论如何都强制执行   
   {SomeCode}      
end;    

三、异常的精确处理

(1)定义一个异常。

​ 在Delphi中,每个异常都是Exception[1]类的一个派生类[2]。因此,定义一个异常就是定义一个Exception类的派生类。  

type EMyException = class(Exception);   

​ 当然,基类可以是Exception或者Exception的任何一个任何层次的派生类。 

(2)在程序中抛出一个异常。

​ 根据不同的情况抛出异常是使用异常的最基本的模式。在Delphi中,由raise语句来实现。  

【语法】raise 异常类.Create(‘异常的缺省说明’); 

(3)在try…except…end中更加精确的捕捉异常。

​ 使用on E:异常类 do…结构可以在do体内处理特定异常类所抛出的异常。

begin
  raise Exception.Create('抛出异常');                       //例1:
end;
 -----------------------------------------------------
begin
  raise Exception.CreateFmt('%s %d', ['错误代码:', 999]);  //例2:
end;
 -----------------------------------------------------
var
  exc: Exception;
begin
  exc := Exception.Create('发现异常');                    //例3:
  raise exc;
end;

四、异常的调试

​ 在Delphi IDE中,解除“Debugger Options”(可以使用菜单Tools—>Debugger Options…进行访问)中的Integrated Debugging复选框的勾选状态可以进行异常的调试。
例如:

try
    Age:=StrToInt(Edit1.Text);
    ShowMessage(Format('生于%d年',[YearOf(Now)-Age]));
except
    on EConvertError do
        showmessage('输入编辑框的不是一个有效的数字!');
    on ERangeError do
        showmessage('输入编辑框的年龄值太大!');
end;
posted @   德琪  阅读(42)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示