zoukankan      html  css  js  c++  java
  • delphi高手突破之异常及错误处理

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

    所谓“异常”是指一个异常类的对象。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

  • 相关阅读:
    January 25th, 2018 Week 04th Thursday
    January 24th, 2018 Week 04th Wednesday
    January 23rd, 2018 Week 04th Tuesday
    January 22nd, 2018 Week 04th Monday
    January 21st, 2018 Week 3rd Sunday
    January 20th, 2018 Week 3rd Saturday
    January 19th, 2018 Week 3rd Friday
    January 18th, 2018 Week 03rd Thursday
    January 17th, 2018 Week 03rd Wednesday
    January 16th, 2018 Week 03rd Tuesday
  • 原文地址:https://www.cnblogs.com/findumars/p/5183713.html
Copyright © 2011-2022 走看看