异常 处理

异常处理——错误处理的方法

通过在应用程序中放置异常处理代码,可以处理用户可能遇到的大多数错误并使应用程序能够继续运行。

如果任何方法使用可能产生异常的运算符,或者调用、访问其他可能产生异常的过程,则在这些方法中应考虑使用异常处理。

如果发生异常的方法不具备处理异常的功能,异常将被传播回调用方法或前一个方法。如果前一个方法也没有异常处理,则异常被传播回该方法的调用方,依次类推。对处理程序的搜索一直持续到“调用堆栈”,它是应用程序内被调用过程的序列。如果未能找到异常的处理程序,则将显示错误信息并终止应用程序。

结构化异常处理

在结构化异常处理中,代码块是封装的,每个块有一个或几个关联的处理程序。每个处理程序对它处理的异常类型指定某种形式筛选条件。当受保护块内的代码发生异常时,按顺序搜索相应处理的处理程序集,并执行第一个与筛选条件匹配的处理程序。当个方法可以有多个结构化异常处理块,而且可以互相嵌套。

Try......Catch......Finally 语句专门用于结构化异常处理。

非结构化异常处理

On Error语句专门用于非结构化异常处理。在非结构化异常处理中,On Error被放置在代码块的开始处。它于是具有该块的“范围‘,它处理发生在该块内任何错误。如果程序遇到另一个On Error语句,则该语句变为有效,而第一个语句变成无效。

何时使用结构化异常处理和非结构化异常处理

结构化异常处理是指使用包含异常的控制结构、隔离的代码块和筛选器来创建异常处理机制。这样,你的代码可以区分不同类型的错误,并根据环境做出相应的响应。在非结构化异常处理中,位于代码开头的On Error语句处理所有异常。

与非结构化异常处理相比,结构化异常处理的使用面更广、更可靠,并且更灵活。应尽可能使用结构化异常处理。但在下列情况下,应使用非结构化异常处理:

  • 升级用 Visual Basic 的早期版本编写的应用程序。

  • 开发应用程序的最初版本或草稿,并且不介意程序是否无法正常关闭。

  • 您事先已经知道导致异常的原因。

  • 时间紧迫,您需要走捷径,也愿意以牺牲灵活性为代价来争取速度。

  • 代码不太重要或非常短,只需对产生异常的代码分支进行测试。

  • 需要使用 Resume Next 语句(结构化异常处理不支持该语句)。

在同一函数内,不能混用结构化和非结构化异常处理。如果使用 On Error 语句,则在同一函数中不能使用 Try...Catch 语句。

无论选择哪一种机制来处理代码内的异常,都必须退一步考虑该代码有哪些假设。例如,如果应用程序要求用户输入电话号码,则有以下假设:

  • 用户将输入一个数字,而不是字符
  • 该数字有特定的格式
  • 用户不会输入空字符
  • 用户只有一个电话号码

用户的输入可能违反这些假设中的任何一个或者全部。可靠的代码需要足够的异常处理机制,使应用程序在用户的输入违反这些假设时,能够正常恢复

除非可以确保方法在任何情况下都不会引发异常,否则应考虑使用说明性异常处理。异常处理应该是有意义的。除了指出有错误发生外,异常处理产生的信息还应说明发生错误的原因和位置。如果提供的信息具有说明性,而仅仅指出”发生错误“,只会使用户感到更加迷惑

 

 

 

 

 

posted @ 2012-11-06 14:06  暴走小白  阅读(243)  评论(0编辑  收藏  举报