扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:佚名 来源:Microsoft 2007年11月10日
关键字:
结构化异常处理测试特定的代码片段,并在发生异常时改编此异常处理代码,以适应导致该异常的环境。与非结构化异常处理相比,结构化异常处理在大程序中运行得较快,在响应错误时更具灵活性,且具有更高的应用程序可靠性。
Try...Catch...Finally 控制结构是结构化异常处理的基本结构。它测试代码片段,筛选该代码执行过程中产生的异常,并根据产生的异常类型做出不同的响应。
Try...Catch...Finally 块Try...Catch...Finally 控制结构测试代码片段,并指导应用程序如何处理各种不同类型的错误。在此过程中,该结构的三个组成部分分别扮演着特定的角色。
Catch 子句可采用三种格式:Catch、Catch...As 和 Catch...When。
不包含 When 关键字的 Catch 子句允许相关的语句块处理所有异常。Catch...As 和 Catch...When 子句捕捉特定的异常,并允许相关的语句块指导应用程序如何处理。也可以将 Catch...As 和 Catch...When 子句组合成一条语句,例如:Catch ex As Exception When intResult <> 0。
如果异常是由资源失败引起的,该子句应该标识此资源,并在可能的情况下提供解决问题的建议或避免出现此问题的提示。如果异常是由编程逻辑失败引起的,该子句应该允许应用程序尽可能安全地退出。如果异常是由用户错误引起的,该子句应该允许用户更正错误并继续进行操作。
Catch 子句按其在代码中出现的顺序执行。因此,当在整个代码序列中执行时,Catch 子句应该从特定部分移到通用部分。例如,在检查完类型后再检查其基本类型。处理 System.Exception 的 Catch 块应该放置到最后,在处理完所有其他可能的异常之后再执行。
Imports System Try varAvailableSeats = varAuditoriumSeats - varNumberOfGuests Catch ex as Exception When varAuditoriumSeats = 0 MsgBox("观众席没有座位!") Exit Sub Catch ex as Exception When varAvailableSeats < 0 MsgBox("没有空余的座位。") Exit Sub Finally MsgBox("谢谢您对我们的音乐会感兴趣。") End Try |
Exception 对象提供所发生异常的有关信息。每次发生异常时,都将设置 Err 对象的属性,并创建一个新的 Exception 对象实例。查看其属性可以确定代码位置、类型以及异常的起因。
以下是 Exception 对象的一些常用属性:
在 Exception 基类中有两种已定义的异常子类:System.Exception 和 Application.Exception。
System.Exception 是 .NET 框架用于从中派生预定义公共语言运行时异常类的类。当发生非致命错误时,公共语言运行时将产生该异常。System.Exception 不提供有关异常原因的信息。
注意:有关预定义公共语言运行时异常类的详细信息,请参阅本文末尾的表1,该表列出了预定义的异常类及其起因和派生类。 可通过从 Application.Exception 类中继承,来创建自己的应用程序异常类。请养成良好的编程习惯,使异常类的名称以单词“Exception”结尾,例如 OutOfMoneyException
或 TooMuchRainException
。
以下示例定义了一个异常类,并为其定义了三个构造函数,每个函数使用了不同的参数。
Imports System Public Class GardenException Inherits System.ApplicationException Public Sub New() End Sub ' 为异常创建 Sub New,允许在发生异常时 ' 设置消息属性。 Public Sub New(Message As String) MyBase.New(Message) End Sub ' 创建 Sub New,用于在需要包含内部 ' 异常时使用。 Public Sub New(Message As String, Inner As Exception) MyBase.New(Message) End Sub End Class |
注意:将远程功能与用户定义的异常组合使用时,必须确保在远程执行代码时可以获取用户定义异常的元数据,包括在应用程序域之间发生的异常。结构化异常处理示例
此代码示例是一个简单的 Try...Catch 块,它先检查 ArithmeticException,然后检查普通异常。
Imports System Sub Main() Dim x As Integer = 0 Try Dim y As Integer = 100 / x Catch ex As ArithmeticException MessageBox.Show(ex.Message) Catch ex As Exception MsgBox(ex.Message) End Try End Sub 'Main |
此代码示例是一个与某应用程序相关的 Try...Catch...Finally 块,该应用程序打开一个文件并进行检查。注意,即使 Exit Sub 在代码中位于 Finally 前面,Finally 语句也将执行。
Imports System Sub OpenMyFile Dim thisFile As Object Try FileOpen(1, thisFile, OpenMode.Input) Catch ex As Exception MsgBox (ex.Message) Exit Sub Finally FileClose(1) End Try End Sub |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者