• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

delphi高手突破之异常及错误处理

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

什么是异常?为什么要用它?

所谓“异常”是指一个异常类的对象。Delphi的VCL中,所有异常类都派生于Exception类。该类声明了异常的一般行为、性质。最重要的是,它有一个Message属性可以报告异常发生的原因。

但需要强调的是,异常用来标志错误发生,却并不因为错误发生而产生异常。产生异常仅仅是因为遇到了raise,在任何时候,即使没有错误发生,raise都将会导致异常的发生。异常的发生,仅仅是因为raise,而非其他!采用抛出异常以处理意外情况,则可以保证程序主流程中的所有代码可用,而不必加入繁杂的判断语句。例如,函数A抛出异常:

 

[delphi] view plain copy
 
  1. function A() : Integer;  
  2. vat  
  3. pFile : textfile;  
  4. begin  
  5. …… // 一些代码  
  6. pFile := SomeFunctionToOpenAnFile();  
  7. if pFile = nil then  
  8. raise Exception.Create(′Open file failed!′); // 文件打开失败抛出异常  
  9. Read(pFile, ……); // 读文件  
  10. …… // 其他一些对文件的操作,此时可以保证文件指针有效  
  11. end;  

函数A的代码使得对文件打开的出错处理非常简单。如果打开文件失败,则抛出一个Exception类的异常对象,函数立刻返回,从而保护了以下对文件指针的操作不被执行。抛出的异常也需要被捕获和处理。假设函数B调用了函数A,要捕获这个文件打开失败的异常,就需要在调用A之前先预设一个陷阱,这个陷阱就是所谓的“try…except块”。先看一下函数B的代码:

 

 

[delphi] view plain copy
 
  1. procedure B();  
  2. begin  
  3. …… // 一些代码  
  4. try  
  5. A(); // 调用A  
  6. SomeFunctionDependOnA(); // 依赖于A的结果的函数  
  7. Except  
  8. ShowMessage(′some error occured′); // 嘿嘿,掉进来了,发生异常  
  9. End;  
  10. …… // 继续的代码  
  11. end;  


A抛出的异常,会被B所设的try…except所捕获。一旦捕获到异常,就不再执行之后的敏感代码,而是立刻跳至except块执行错误处理,处理完成后再继续执行整个try块之后的代码。程序流程的控制权被留在了函数B。

http://blog.csdn.net/sushengmiyan/article/details/7506421


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
delphi的坐标变换(ClientToScreen等函数的应用)发布时间:2022-07-18
下一篇:
delphi怎么实现主窗口退出时,有一个提示框?发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap