try try 自己希望的处理过程 except 出现错误后的处理 end finally 释放内存 end
Exceptions are handled within try...except statements. For example,try X := Y/Z; except on EZeroDivide do HandleZeroDivide; end;This statement attempts to divide Y by Z, but calls a routine named HandleZeroDivide if an EZeroDivide exception is raised.The syntax of a try...except statement istry statements except exceptionBlock end
try
自己希望的处理过程
except
出现错误后的处理
end
finally
释放内存
end
X := Y/Z;
except
on EZeroDivide do HandleZeroDivide;
end;This statement attempts to divide Y by Z, but calls a routine named HandleZeroDivide if an EZeroDivide exception is raised.The syntax of a try...except statement istry statements except exceptionBlock end
也就是说, 任何分配资源的情况, 都应该使用 try..finally 以确保资源被正确释放.
在单元的 initialization/finalization 中或在对象的 constructor/destructor 中分配/释放资源的情况不在此列.
try..finally 的使用
任何可能的地方, 所有的资源分配代码都必须以 try..finally 结构保护起来.
例如, 下面的代码可能导致的 bug:
SomeClass1 :=
TSomeClass.Create
SomeClass2 := TSomeClass.Create;
try
{ do some code }
finally
SomeClass1.Free;
SomeClass2.Free;
end;
更安全的做法应该是:
SomeClass1 := TSomeClass.Create
try
SomeClass2 := TSomeClass.Create;
try
{ do some code }
finally
SomeClass2.Free;
end;
finally
SomeClass1.Free;
end;
try..except 的使用
try..except 应该只在你需要在产生意外时执行任务的情况下使用.
一般来说, 你不需要使用 try..except 来简单地显示错误信息,
因为应用程序将通过 Application 对象自动实现这一点.
在 except 子句中, 如果你希望在执行过自己的任务后再调用缺省的意外处理程序, 应该使用 raise 来再次产生这个意外.try..except..else 的使用
在 try..except 中使用 else 子句是不好的,
因为它将阻塞所有的意外, 包括那些你没有准备处理的意外.
。。
except
出错处理
end
try
...........................................
finally
不管错也不错,都做的事
end
try
try
..............
finally
..............
end
excpet
.................
end
能保证发生异常以后肯定执行Finally,然后处理Except
參照頁 http://www.codestudy.net/book/list.asp?id=497OK