i:=1;j:=0;
try
try
i:=i div j;
except
showmessage(vartostr(i));
showmessage('is this ok?');
showmessage('except');
end;
finally
showmessage('finally');
end;
显示结果为:
1
is this ok?
except
finally
但是把showmessage(vartostr(i));这一句去掉就只显示finally了,请问是为什么?
为什么有的时候嵌套的except中的语句不执行。此问题同样出现在except中嵌套finally的情况,大家可以试一下。
try
try
i:=i div j;
except
showmessage(vartostr(i));
showmessage('is this ok?');
showmessage('except');
end;
finally
showmessage('finally');
end;
显示结果为:
1
is this ok?
except
finally
但是把showmessage(vartostr(i));这一句去掉就只显示finally了,请问是为什么?
为什么有的时候嵌套的except中的语句不执行。此问题同样出现在except中嵌套finally的情况,大家可以试一下。
这样来测设try
try
raise exception.Create('yichang ');
except
showmessage(vartostr(i));
showmessage('is this ok?');
showmessage('except'); end;
finally
showmessage('finally');
i:=1;j:=0;
try
try
i:=i div j; //这里抛出异常
except
showmessage(vartostr(i));
showmessage('is this ok?');
showmessage('except');
end;
finally
showmessage('finally');
end;
编译器优化论也好,delphi已经处理论也好,都不能知道自己写的语句是否执行except部分是吗?
必须自己调试才能得到结果,是吗?
放到finally的语句块外面也照样提示
value assigned to 'i' never used,value assigned to 'j' never used
我很迷惑,呵呵。
tjff2000(fengyun),你说呢?
try
try
...
finally
...
end;
except
...
end;finaly不处理异常,except处理异常,在except后,异常已被处理,就没有异常了,所以你的语句跟下面的没有区别
i:=1;j:=0;
try
i:=i div j;
except
showmessage(vartostr(i));
showmessage('is this ok?');
showmessage('except');
end;
showmessage('finally');
是编译器做了优化。
而Finally这样的嵌套是无论如何都要执行的。当然会发生有时候except后的语句不执行的情况了。
i:=j;
showmessage(vartostr(i));