首先我认为你没有使用好异常处理机制. Try except on e:exception do showmessage(e.message);// Raise Exception.create('将该异常提交给上一层处理') end; 如果你想自定义一个异常类,那就继承Exception类 type myexception =class(Exception) Procedure myproc(); ... end; 然后可以这么使用 try ... except on E:myexception do begin end; on E:Dbexception do begin end; on E:IOexception do begin end; end;
如果还要象Java那样需要有finally处理的话,就这么写 try try .. exception e:myexception do begin //deal this Exception; Raise Exception.create('');//Resase this exception end; finally begin //do something,For example:release some resource end; end; 不过如果只是显示异常信息的话,你是用Raise Exception.create()就够了.
procedure CustException(Sender: TObject; E: Exception);
你没有捕捉,在error对象中message和id/errno属性。
Try
except on e:exception do
showmessage(e.message);// Raise Exception.create('将该异常提交给上一层处理')
end;
如果你想自定义一个异常类,那就继承Exception类
type
myexception =class(Exception)
Procedure myproc();
...
end;
然后可以这么使用
try
...
except
on E:myexception do
begin end;
on E:Dbexception do
begin end;
on E:IOexception do
begin end;
end;
如果还要象Java那样需要有finally处理的话,就这么写
try
try
..
exception e:myexception do
begin
//deal this Exception;
Raise Exception.create('');//Resase this exception
end;
finally
begin
//do something,For example:release some resource
end;
end;
不过如果只是显示异常信息的话,你是用Raise Exception.create()就够了.
━━━━━━━━━━━━━━━━━━━━━
格式:try statement1 finally statement2 end;
说明:程序顺次执行statement1 和statement2,当执行statement1出现异常错误时,
程序直接从出错的语句跳转到finally,去执行statement2的部分,从而确保
调用的资源能够被释放。procedure TForm1.Button1Click(Sender: TObject);
var
APointer : Pointer;
AnInteger, Andividend : Integer;
begin
ADividend := 0;
GetMem(APointer,1024); //申请1k的内存
try
AnInteger := 10 div Adiviend; //导致异常
finally
FreeMem(APointer,1024); //虽然出现异常,但仍然能释放被分配的内存
end;
还有要定义自己的异常类只用继承就可以了
type
EMyErrot=class(Exception);
MyError=class(Exception)
Private
fCode : Integer ;
public
constructor Create(Code : integer;const Msg: string); OverLoad ;
const); OverLoad ;
property Code : integer Read fCode ;
end ;如此使用:
if price<0 then
Raise MyMyError.Create(0,'價格不能小于零');
產生自己的異常,
在外部調用時用
try
...
except
on E : MyErrot do
case e.code of
0 :... ;
1 :... ;
end;
end;