Declaring exception types(声明异常类型)异常类的声明和其它类一样,实际上,使用任何类的一个实例表示异常是可行的,但推荐从- 116 -
try...finally封装起来进行保护,但实际上最好EinOutError异常FalseSysUtils单元的话)
Object I/O和操作系
Assert语句失败时,the standard SysUtils单
或
,不会引发异常。只有当判断一个你
Classes and objects
元的Exception类进行派生。
你能应用继承关系给异常分组,比如,下面是SysUtils单元中的声明,它为计算错误定义了一组异常类 type
EMathError = class(Exception);
EInvalidOp = class(EMathError);
EZeroDivide = class(EMathError);
EOverflow = class(EMathError);
EUnderflow = class(EMathError);
给定上面的声明,你能定义一个单一的EMathError异常处理程序,它也能处理EInvalidOp、EZeroDivide、EOverflow和EUnderflow异常。
有时,异常类会定义字段、方法和属性,它们用来传达一些额外的错误信息。比如,
type EInOutError = class(Exception)
ErrorCode: Integer;
end;
Raising and handling exceptions(引发和处理异常)
Raising and handling exceptions(引发和处理异常)
要创建一个异常对象,在raise语句中调用异常类的构造函数。pascal 视频教程比如,
raise EMathError.Create;
通常,raise语句的格式是
raise object at address
这里,object和at address都是可选的。若省略了object,则语句重新引发当前异常,请参考Re-raising exceptions;当指定了一个地址,它通常是指向过程或函数的指针,使用这个选项,可使异常从堆栈中一个较早点引发,而不是从它实际发生的地点引发(use this option to raise the exception from an earlier point in the stack than the one where the error actually occurred)。
当引发一个异常时,也就是使用了raise语句(referenced in a raise statement),它将受异常处理逻辑的控制。一个raise语句永远不会以正常方式返回控制,相反,它把控制权交给能处理指定的异常(类)、并且在最内层的异常处理程序(最内层是指最后进入但还没有退出的一个try...except块)。
比如,下面的函数把一个字符串转换为整数,若结果超出指定的范围则引发一个ERangeError异常。 function StrToIntRange(const S: string; Min, Max: Longint): Longint;
begin
Result := StrToInt(S); // StrToInt在SysUtils单元声明
if (Result < Min) or (Result > Max) then
raise ERangeError.CreateFmt(
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23665-87.html
如果是1937年你肯定是汉奸