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

更新:2007 年 11 月

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

备注

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

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

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

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

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

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

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

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

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

  • 用户将输入一个数字,而不是字符。

  • 该数字有特定的格式。

  • 用户不会输入空字符串。

  • 用户只有一个电话号码。

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

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

请参见

任务

异常处理疑难解答

概念

错误类型

Visual Basic 的结构化异常处理概述

非结构化异常处理概述