简单来说,
结构化异常处理是指使用包含异常的控制结构、隔离的代码块和筛选器来创建异常处理机制。
这样,您的代码可以区分不同类型的错误,并根据环境做出相应的响应。
在非结构化异常处理中,位于代码开头的 On Error 语句处理所有异常。
----------------------------------------------------------------------------------------------------------------------------------------------
Visual Basic 支持结构化异常处理,您可以使用该处理创建和维护具有可靠、全面的错误处理程序的程序。
结构化异常处理是旨在通过将控制结构(类似于 Select Case 或 While)与异常、受保护的代码块和筛选器结合起来,在执行期间检测和响应错误的代码。
- - - - - - - -- - - - - - - - - - -- - - - - - -- - - - - -- - - - -- - - - - -- - - - -- - - - -- - - -- - - - -- - - -- - - - -- - - -- - - -- - - -- - - -
在“非结构化异常处理”中,您将 On Error 语句放在代码块的开始处,它将处理在该块内发生的任何错误。 如果在执行 On Error 语句后过程中引发了异常,
程序分支到 On Error 语句中指定的行参数。 行参数(行号或行标签)指示异常处理程序的位置。
有时,从原始过程调用另一个过程,并且被调用过程中发生异常。 这种情况下,如果被调用过程不处理异常,则异常传播回调用过程,并且执行分支到行参数。
使用 On Error 的非结构化错误处理会降低应用程序的性能并导致代码难以调试和维护。 建议使用结构化错误处理方法。
-------------------------------------------------------------------------------------------------------------------------------------------------
与非结构化异常处理相比,结构化异常处理的适用面更广、更可靠,并且更灵活。应尽可能地使用结构化异常处理。
但在下列情况下,应使用非结构化异常处理:
升级用 Visual Basic 的早期版本编写的应用程序。
开发应用程序的最初版本或草稿,并且不介意程序是否无法正常关闭。
您事先已经知道导致异常的原因。
时间紧迫,您需要走捷径,也愿意以牺牲灵活性为代价来争取速度。
代码不太重要或非常短,只需对产生异常的代码分支进行测试。
需要使用 Resume Next 语句(结构化异常处理不支持该语句)。
在同一函数内,不能混用结构化和非结构化异常处理。 如果使用 On Error 语句,则在同一函数中不能使用 Try...Catch 语句。
用户将输入一个数字,而不是字符。
该数字有特定的格式。
用户不会输入空字符串。
用户只有一个电话号码。
用户的输入可能会违反这些假设中的任何一个或全部。 可靠的代码需要足够的异常处理机制,使应用程序在用户的输入违反这些假设时能够正常恢复。
除非可以确保方法在任何情况下都不会引发异常,否则应考虑使用说明性异常处理。 异常处理应该是有意义的。
除了指出有错误发生外,异常处理产生的信息还应说明发生错误的原因和位置。 如果提供的信息不具有说明性,而仅仅指出“发生错误”,只会使用户感到更迷惑。