其他语言

位置:IT落伍者 >> 其他语言 >> 浏览文章

DELPHI基础教程:异常处理与程序调试(二)[1]


发布日期:2022年04月27日
 
DELPHI基础教程:异常处理与程序调试(二)[1]

异常响应

异常响应为开发者提供了一个按自己的需要进行异常处理的机制try …except …end形成了一个异常响应保护块与finally不同的是正常情况下except 后面的语句并不被执行而当异常发生时程序自动跳到except进入异常响应处理模块当异常被响应后异常类自动清除

下面的例子表示了文件打开删除过程中发生异常时的处理情况

uses Dialogs;

var

F: Textfile;

begin

OpenDialogTitle := Delete File;

if OpenDialogExecute then

begin

AssignFile(F OpenDialogFileName)

try

Reset(F)

if MessageDlg(Erase +OpenDialogFileName + ?

mtConfirmation [mbYes mbNo] ) = mrYes then

begin

SystemCloseFile(F)

Erase(F)

end;

except

on EInOutError do

MessageDlg(File I/O error mtError [mbOk]

on EAccessDenied do

MessageDlg(File access denied mtError [mbOk]

end;

end;

end

保留字on…do用于判断异常类型必须注意的是except后面的语句必须包含在某一个on…do模块中而不能单独存在这又是同finally不同的一个地方

使用异常实例

上面所使用的异常响应方法可总结为如下的形式

on ExceptionType do

{响应某一类的异常}

这种方法唯一使用的信息是异常的类型一般情况下这已能满足我们的需要但我们却无法获取异常实例中包含的信息比如异常消息错误代码等假设我们需要对它们进行处理那么就必须使用异常实例

为了使用异常实例需要为特定响应模块提供一个临时变量来保存它

on EInstance : ExceptionType do …

在当前响应模块中我们可以象使用一个普通对象那样来引用它的数据成员但在当前响应模块之外不被承认

下面的代码用于获取异常消息并按自己的方式显示它

{窗口中包括一个ScrollBar部件一个Button部件}

procedure TErrorFormButtonClick(Sender: TObject)

begin

try

ScrollBarMax := ScrollBarMin;

except

on E: EInvalidOperation do

MessageDlg(Ignoring Exception:+EMessage

mtInformation[mbOK]

end;

end;

提供缺省响应

在异常响应模块中一般我们只对希望响应的特定异常进行处理如果一个异常发生而响应模块并没有包含对它的处理代码则退出当前响应模块异常类仍被保留

为了保证任何异常发生后都能在当前响应模块中被清除可以定义缺省响应

try

{程序正常功能}

except

on ESomething do

{响应特定异常}

else

{提供缺省响应}

end;

由于else可以响应任何异常包括我们一无所知的异常因此在缺省响应中最好只包括诸如显示一个消息框之类的处理而不要改变程序的运行状态或数据

响应一族异常

诸如

on ExceptionType do

的异常响应语句不仅可响应本类异常而且可以响应子类异常对于象EIntErrorEMathError等系统不会引发的异常它们将只响应其子类异常而对于象

on Exception do

这样的语句将会对任何异常进行响应

下面一段代码对整数越界异常进行单独处理而对其它整数异常进行统一处理

try

{整数运算}

except

on ERangeError do

{越界处理}

on EIntError do

{其它整数异常处理}

end;

由于异常在处理后即被清除因而上面的代码可保证不会使ERangeError异常被多次处理假如颠倒两条响应语句的顺序则ERangeError异常响应将永远没有被执行的机会

由于异常在处理后即被清除因而当希望对异常进行多次处理时就需要使用保留字raise来重引发一个当前异常

[] [] [] []

               

上一篇:DELPHI基础教程:异常处理与程序调试(二)[2]

下一篇:DELPHI基础教程:异常处理与程序调试(二)[4]