X xjw10 Unregistered / Unconfirmed GUEST, unregistred user! 2007-05-19 #1 try except end 和try finally end分别用在什么时候?
勇 勇者 Unregistered / Unconfirmed GUEST, unregistred user! 2007-05-19 #2 try except end 有预期异常的情况下 try finally end必须完成某种事情下
H Hydra0 Unregistered / Unconfirmed GUEST, unregistred user! 2007-05-19 #4 举简单例子 try StrToInt(Edit1.Text); except ShowMessage('Edit1中不是整数'); end; try..except中的代码如果发生异常,就会转到except..end; 至于try..finally..end; 我想用的很多的就是动态创建对象 var fs: TMemoryStream; begin try ds:= TMemoryStream.Create; ......//其他代码 finally FreeAndNil(ds); end; try..finally中的代码就算发生意外,跳出或者终止,始终还是会执行finally..end;中的语句,这样就收回资源
举简单例子 try StrToInt(Edit1.Text); except ShowMessage('Edit1中不是整数'); end; try..except中的代码如果发生异常,就会转到except..end; 至于try..finally..end; 我想用的很多的就是动态创建对象 var fs: TMemoryStream; begin try ds:= TMemoryStream.Create; ......//其他代码 finally FreeAndNil(ds); end; try..finally中的代码就算发生意外,跳出或者终止,始终还是会执行finally..end;中的语句,这样就收回资源
X xjw10 Unregistered / Unconfirmed GUEST, unregistred user! 2007-05-19 #5 To:Hydra0:你好,如果是: try StrToInt(Edit1.Text); ShowMessage('出错'); except ShowMessage('Edit1中不是整数'); end; --------ShowMessage('出错');这句还会执行吗?
To:Hydra0:你好,如果是: try StrToInt(Edit1.Text); ShowMessage('出错'); except ShowMessage('Edit1中不是整数'); end; --------ShowMessage('出错');这句还会执行吗?
X xjw10 Unregistered / Unconfirmed GUEST, unregistred user! 2007-05-19 #6 因为我前天去一家厂面试时有个这样的题目: try i := 5; j := 0; try i := i+20; i := i div j; i := i+30; finally i := i+40; end; except i := i+50; end; i := i+60; 要求出最终的结果,把我搞糊涂了。大家看看是什么结果。
因为我前天去一家厂面试时有个这样的题目: try i := 5; j := 0; try i := i+20; i := i div j; i := i+30; finally i := i+40; end; except i := i+50; end; i := i+60; 要求出最终的结果,把我搞糊涂了。大家看看是什么结果。
H Hydra0 Unregistered / Unconfirmed GUEST, unregistred user! 2007-05-19 #7 流程是这样的,发生异常后从异常点直接跳入except后的语句,所以异常点后的语句是不会执行的 如果没有发生异常,那就除了except..end;外的语句都会执行 所以,我的例子中,如果Edit1.Text的内容能被转化为Int话,那ShowMessage('出错');就会被执行 如果不能转化,那么ShowMessage('Edit1中不是整数');会被执行,StrToInt(Edit1.Text);后的语句全被忽略掉
流程是这样的,发生异常后从异常点直接跳入except后的语句,所以异常点后的语句是不会执行的 如果没有发生异常,那就除了except..end;外的语句都会执行 所以,我的例子中,如果Edit1.Text的内容能被转化为Int话,那ShowMessage('出错');就会被执行 如果不能转化,那么ShowMessage('Edit1中不是整数');会被执行,StrToInt(Edit1.Text);后的语句全被忽略掉
H Hydra0 Unregistered / Unconfirmed GUEST, unregistred user! 2007-05-19 #9 虽然出了异常后,异常点后的语句不会执行,不过finally..end;中的语句我先都说过,不管任何情况下都会执行的
A army430010 Unregistered / Unconfirmed GUEST, unregistred user! 2007-05-19 #10 try except 用在你知道出错原因时,比如你遍个计算器软件,当被0除是软件回报出错误 原因,E开头,你就可一写这样的语句 try ....... except on E---; 异常后的处理代码; end; try finally 表示出现异常后直接跳到finally语句
try except 用在你知道出错原因时,比如你遍个计算器软件,当被0除是软件回报出错误 原因,E开头,你就可一写这样的语句 try ....... except on E---; 异常后的处理代码; end; try finally 表示出现异常后直接跳到finally语句
X xjw10 Unregistered / Unconfirmed GUEST, unregistred user! 2007-05-19 #11 Hydra0:分析得很好。非常感谢,看看还有没有其他人过来发表一下,等下结帖了。