delphi中Try...Except 语句和Try...Finally 语句 .

原创 2012年03月24日 08:24:59

在Try...Except 语句中可以进行抛出异常和处理异常的工作。Try...Except 的一般形式如下:

 try
Statements1;
except
on Exception1 do HandleStatements1;
on Exception2 do HandleStatements2;

on ExceptionN do HandleStatementsN;
else
Statements2;
end.
对于有些操作,在异常处理部分要进行,在正常情况下也要进行。例如在正常情况下,使用完文件之后关闭文件;如果在对文件操作的过程中出现了异常,也需要关闭已经打开的文件。这时,就可以把关闭文件的过程放在Try...Finally 语句的Finally 部分,不管Try 部分的操作是否正常,都要进行Finally 部分的操作。
通常Try...Finally 语句的形式如下:
 try
statementList1
finally
statementList2
end
可以看到,Try...Finally 语句的用法与Try...Except 语句的用法很相似。StatementList1 可以为简单语句,也可以为复合语句。如果在StatementList1 中抛出了异常,程序立即转到Finally 部分;如果在StatementList1 中执行了Exit、Break 或Continue 过程而导致程序的控制离开StatementList1 部分时,程序也会跳转到Finally 部分;如果在Try 部分正常执行完毕,接着执行的还是Finally 部分。
下面的例子介绍了在文件输入/输出时, 怎样用异常处理。可以区分与Try...Except 语句和Try...Finally 语句的用法。
 program Project1;
uses
Classes,Dialogs,SysUtils;
{$APPTYPE CONSOLE}
var
F:TextFile;
S:String;
begin
AssignFile(F,’f1.txt’);
try
reset(F);
try
readln(F,s);
finally
CloseFile(F);
end;
except
on EinOutError do
ShowMessage(’Error in FileIO’);
end;
end.
    内层的Try...Finally 代码块用来确保文件总是关闭的,而不管是否发生了异常。这段代码的执行过程是:先执行Try 与Finally 之间的代码;如果执行完毕或出现异常,就执行Finally 与End 之间的代码;如果确实有异常发生,就跳到外层的异常处理块。这样,即使出现异常,文件也总是关闭的,并且异常总能得到处理。
注意:在Try...Finally 块中,Finally 后面的语句不管有没有异常都被执行。因此,Finally 后面的语句不能以发生异常为前提。另外,由于Finally 后面的语句并没有处理异常,因此,异常被传递到下一层的异常处理块。
外层的Try...Except 块用于处理程序中发生的异常。在Finally 中关闭文件,并且在Except 块显示一个信息,告诉用户发生了I/O 错误。
    种异常处理机制比传统的错误处理方式优越,它使得错误检测代码从错误纠正代码中分离出来。这是一件好事,它会使程序更可读,使得开发人员能够集中处理程序的其他代码。
    使用Try...Finally 代码块,但不捕捉特定种类的异常是有一定意义的。当代码中使用Try...Finally块的时候,意味着程序并不关心是否发生异常,而只是想最终总是能进行某项任务。Finally 块最适合于释放先前分配的资源(例如文件或Windows 资源),因为它总是执行的(即使发生了错误)。不过,很多情况下,可能需要对特定的异常做特定的处理,这时候就要用Try...Except 块来捕捉特定的异常。
例如:
 Program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils,Dialogs;
var
R1,R2:double;
begin
while True do begin
try
write(’Enter a real number: ’);
readln(R1);
write(’Enter another real number: ’);
readln(R2);
writeln(’The first number divided by the Second is: ’,(R1/R2):5:3);
except
on EInOutError do
ShowMessage(’It is not a valid number! ’);
on EZeroDivide do
ShowMessage(’Can not divide by zero! ’);
end;
end;
end.
尽管在Try...Except 块中可以捕捉特定的异常,也可以用Try...Except...Else 结构来捕捉其他异常。当使用Try...Except...Else 结构的时候,应当明白Else 部分会捕捉所有的异常,包括那些并没有预料到的异常,例如内存不足或其他运行期异常。因此,使用Else 部分时要小心,能不用则不用。当进入不合格的异常处理过程中时,应当触发这个异常。

delphi中Try...Except 语句和Try...Finally 语句

在Try...Except 语句中可以进行抛出异常和处理异常的工作。Try...Except 的一般形式如下:  try Statements1; except on Except...
  • aTian2009
  • aTian2009
  • 2011年09月14日 23:18
  • 760

delphi try except语句 和 try finally语句用法以及区别

try//尝试执行    {SomeCode}   except//出错的时候执行, Except有特定的错误类型      {SomeCode}   end; try//尝试执行{SomeCode}...
  • haiou327
  • haiou327
  • 2009年07月05日 23:54
  • 7659

delphi try except语句 和 try finally语句用法

不错。 原文地址:try except语句 和 try finally语句用法以及区别" href="http://blog.sina.com.cn/s/blog_6f3758950100o...
  • lailai186
  • lailai186
  • 2012年03月24日 09:12
  • 5177

Delphi异常处理try except语句和try finally语句用法以及区别〖原创+转载〗

一直写程序都没管他们,也尽量很少用,今天终于想把他给弄个明白,在网上找来,记下! 主要是前面小部分,后面的是详细说明(很啰嗦!) 一、异常的来源   在Delphi的应用程序中,下列的情...
  • wozengcong
  • wozengcong
  • 2014年08月30日 15:40
  • 658

Java中try catch finally语句中含有return语句的执行情况(总结版)

在这里看到了try catch finally语句中含有return语句的几种总结情况,但其实解释的很含糊,而且并不全面。但有一点是可以肯定的,finally块中的内容会先于try中的 return...
  • mmc_maodun
  • mmc_maodun
  • 2013年12月25日 23:06
  • 12851

【Java】try中有return,finally块执行问题

对于如下的一段程序: package try_catch_finally_return; public class TCFRtest { private static void Test1(){...
  • yongh701
  • yongh701
  • 2015年11月26日 17:03
  • 2513

try语句的finally到底是否执行

谁能给我我解释一下这段程序的结果为什么是:2.而不是:3 代码如下: class Test { public int aaa() { int x = 1; ...
  • timruning
  • timruning
  • 2015年07月22日 22:41
  • 2621

Delphi异常处理try except语句和try finally语句用法以及区别

Delphi异常处理try except语句和try finally语句用法以及区别                一直写程序都没管他们,也尽量很少用,今天终于想把他给弄个明白,在网上找来,...
  • my98800
  • my98800
  • 2016年07月05日 10:23
  • 142

python中的异常处理:try...except...else...finally语句

与 其他语言相同,在python中,try/except语句主要是用于处理程序正常执行过程中出现的一些异常情况,如语法错误(python作为脚本语言 没有编译的环节,在执行过程中对语法进行检测,出错后...
  • drdairen
  • drdairen
  • 2016年04月14日 16:23
  • 2092

python中的try/except/else/finally语句

与其他语言相同,在python中,try/except语句主要是用于处理程序正常执行过程中出现的一些异常情况,如语法错误(python作为脚本语言没有编译的环节,在执行过程中对语法进行检测,出错后发出...
  • u010009038
  • u010009038
  • 2016年10月02日 16:35
  • 154
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:delphi中Try...Except 语句和Try...Finally 语句 .
举报原因:
原因补充:

(最多只允许输入30个字)