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

时间: 2024-10-25 17:41:41

delphi高手突破之异常及错误处理的相关文章

Delphi高手突破(四) Delphi高级进阶

别人造砖我砌房! Delphi  高手突破     VCL——Visual Component Library,是 Delphi 的基石.Delphi 的优秀,很大程度上得益于 VCL 的优秀.VCL 是 Delphi 所提供的基本组件库,也就是所谓的 Application Framework,它对Windows API(应用程序接口)进行了全面封装,为桌面开发(不限于桌面开发)提供了整套的解决方案,使得程序员可以在不知晓 API 的情况下进行 Windows编程.不过,作为专业的程序员,不知

Delphi高手突破(三) Delphi高级进阶

第 3章  异常及错误处理 健壮的程序来自于正确的错误处理.    相信我,总会有意外的…… Delphi  高手突破     正如同现实生活中我们不可能事事如意,你所写的代码也不可能每一行都能得到正确的执行.生活中遇到不如意的事情,处理好了,雨过天晴:处理不好,情况会越变越糟,甚至一发而不可收拾,后果难料.程序设计中同样如此,所谓健壮的程序,并非不出错的程序,而是在出错的情况下能很好地处理的程序.因此,错误处理一直是程序设计领域的一个重要课题.而异常就是面向对象编程提供的错误处理解决方案.它是

Delphi 高手突破(申 旻 著)-第一章 重新认识Delphi

简单性是这个世界上最难获得的东西:它是经验的最终界限,也是天才的最终努力目标.——George Sand 您已经是一位熟练的Delphi程序员,可以运用Delphi快速地写出一个漂亮.实用的程序:您热爱Delphi:她已经成了您工作.学习中不可或缺的一部分.我假设这些都为真,那么您当初选择Delphi作为自己的首选开发工具一定有自己的理由或者原因. 至少,我自己是符合以上的所有假设的.现在,我所想和您分享的,正是我选择Delphi的理由及原因,以及我对Delphi的认识.您可以把我看作一个拥护D

Delphi 高手突破(申 旻 著)-第 2 章 面向对象编程理论基础

面向对象是一种思维方式(理念),是一种方法论. 每个软件开发人员都会经常听到. 看到“ 面向对象” 这个词,程序员们也时常会把它挂在嘴上.那么, 什么是面向对象?什么是面向对象编程?是不是写几个类就算面向对象了?为什么要面向对象?因为别人都用,所以我也要用?显然, 并不是在程序中写了几个类就算面向对象编程了, 用面向对象编程也并不是为了赶时髦. “结构化编程” ( SP) 是一种编程方法, 是用计算机的视角来抽象问题的方法. 而“ 面向对象编程” ( OOP)也是一种编程方法, 它从更接近真实世

Retrofit+RxJava 优雅的处理服务器返回异常、错误

开始本博客之前,请先阅读: Retrofit请求数据对错误以及网络异常的处理 异常&错误 实际开发经常有这种情况,比如登录请求,接口返回的 信息包括请求返回的状态:失败还是成功,错误码,User对象等等.如果网络等原因引起的登录失败可以归结为异常,如果是用户信息输入错误导致的登录失败算是错误. 假如服务器返回的是统一数据格式: /** * 标准数据格式 * @param <T> */ public class Response<T> { public int state;

14.PowerShell--抛出异常,错误处理

PowerShell – 错误处理 1.  What-if 参数 (试运行,模拟操作) 简介:PowerShell 不会执行任何对系统有影响的操作,只会告诉你如果没有模拟运行,可能产生什么影响和后果. 实例: PS C:\>Stop-Process  -name calc -whatif What if: Performing theoperation "Stop-Process" on target "calc (119000)". 2.  -confirm

《java中异常和错误》

异常和错误的区别. 异常: 在Java中程序的错误主要是语法错误和语义错误,一个程序在编译和运行时出现的错误我们统一称之为异常,它是VM(虚拟机)通知你的一种方式,通过这种方式,VM让你知道,你(开发人员)已经犯了个错误,现在有一个机会来修改它.Java中使用异常类来表示异常,不同的异常类代表了不同的异常.但是在Java中所有的异常都有一个基类,叫做Exception. 错误:它指的是一个合理的应用程序不能截获的严重的问题.大多数都是反常的情况.错误是VM的一个故障(虽然它可以是任何系统级的服务

VC 调试技术与异常(错误)处理 VC 调试技术与异常(错误)处理

调试技术与异常(错误)处理 (1)   转载自 52PK游戏论坛 跟踪与中间过程输出 也许一个开发人员一半以上的时间都是在面对错误,所以好的调试/查错方法(工具)会减轻我们工作的负担,也可以让枯燥的DEBUG过程得以缩短. VC开 发环境所提供的调试环境是很优秀的,我们可以运用单步运行,设置断点的方法来查找问题所在.但是这种跟踪是非常耗时的,所以我们需要采用一些策略来让我们 更容易的发现错误并对错误进行定位,所幸的是VC在这方面提供了强大的支持.在本节中我们先看看如何利用设置断点和利用TRACE

java 检查抛出的异常是否是要捕获的检查性异常或运行时异常或错误

/** * Return whether the given throwable is a checked exception: * that is, neither a RuntimeException nor an Error. * @param ex the throwable to check * @return whether the throwable is a checked exception * @see java.lang.Exception * @see java.lang