如何在 Visual Basic 2005 中或在 Visual Basic.net 中捕捉异常

文章翻译 文章翻译
文章编号: 301283 - 查看本文应用于的产品
这篇文章的 Microsoft Visual C# 2005年和 Microsoft Visual C#.net 版本,请参阅 308345

为这篇文章的一个 Microsoft Visual Basic 6.0 中版本,请参阅 191474
展开全部 | 关闭全部

本文内容

概要

捕捉和处理的异常是标准的编程任务。本文演示如何使用 一个 try-catch-finally 程序块捕捉异常。一次尝试-catch-finally 程序块是"包装"您的任何代码周围放置在异常的可能性存在。

一次尝试-catch-finally 程序块包含以下各节:
  • 任何可能会引发异常的代码放在 try 块内。
  • 如果就会引发异常 的 catch 块输入,并,程序可以执行相应操作恢复或警告用户。
  • 该代码在 finally 程序块中的总是执行,并发生异常后,可以执行清理操作。finally 程序块是可选的。

要求

下面的列表概述了建议的硬件、 软件、 网络的基础结构和服务包,您需要:
  • Microsoft Windows Server 2003 Microsoft Windows 2000 专业版 Windows 2000 Server,Windows 2000 高级服务器,或 Microsoft Windows NT 4.0 服务器
  • Microsoft Visual Basic 2005 或 Microsoft Visual Basic.net

逐步骤示例

  1. 在 Visual Basic 2005 中或在 Visual Basic.net 中,请创建一个新的控制台应用程序。
  2. 在 Sub Main 过程中插入下面的代码示例。此示例声明并初始化其中的"k"初始化将导致错误的三个变量
    ' This code generates an exception.
    	Console.WriteLine("We're going to divide 10 by 0 and see what happens...")
    	Console.WriteLine()
    
    	Dim i as Integer = 10
    	Dim j as Integer = 0
    	Dim k As Integer = i/j ' Error on this line.
    					
  3. 按 F5 键以查看该异常。
  4. 围绕您的代码以捕获错误 try-catch 语句的换行。下面的代码将捕捉所有错误的代码中引发,并显示一条一般错误消息。Sub Main 过程中的代码替换下面的代码。
    ' This code shows how to catch an exception.
    Try
    	Console.WriteLine("We're going to divide 10 by 0 and see what happens...")
    	Console.WriteLine()
    
    	Dim i as Integer = 10
    	Dim j as Integer = 0
    	Dim k As Integer = i/j ' Error on this line. Control jumps to the catch block.
    Catch
    	Console.WriteLine("An error occurred.")
    End Try
  5. 按 CTRL + F5 运行项目。请注意会显示错误消息从 catch 块。
  6. 如果某些清理或后续处理需要完成的错误而不考虑,使用,最后尝试-catch-最后 语句的一部分。语句的 最后 部分中的代码总是执行,而不考虑的异常。下面的代码显示"此语句将始终打印"控制台中即使没有发生错误。Sub Main 代码替换下面的代码
    ' This code shows how to catch an exception.	
    Try
    	Console.WriteLine("We're going to divide 10 by 0 and see what happens...")
    	Console.WriteLine()
    
    	Dim i as Integer = 10
    	Dim j as Integer = 0
    	Dim k As Integer = i/j ' Error on this line. Control jumps to the catch block.
    
    Catch
    	Console.WriteLine("An error occurred.")
    Finally   ' This section is performed regardless of the above processing.
    	Console.WriteLine()
    	Console.WriteLine("This statement is always printed")
    End Try
    					
  7. 按 CTRL + F5 运行项目。
  8. 使用 catch 语句的异常对象,可以检索有关异常的详细信息。异常具有的许多属性,可以帮助您识别帮助、 源,或偶数堆栈有关异常的信息。此信息可以跟踪原始异常的原因或提供了更好地说明其源的非常有用。下面的示例捕获异常,并提供具体的错误消息。如前,您可以替换在 Sub Main 中的代码用下面的代码的过程。

    示例 1
    ' This code shows how to catch an exception.
    Try
    	Console.WriteLine("We're going to divide 10 by 0 and see what happens...")
    	Console.WriteLine()
    
    	Dim i as Integer = 10
    	Dim j as Integer = 0
    	Dim k As Integer = i/j ' Error on this line. Control jumps to the catch block.
    
    Catch e As Exception  ' Perform code that deals with the exception
                          ' or informs the user what occurred.
    	Console.WriteLine("The following error occurred:")
    	Console.WriteLine(e.ToString())  ' Print the error message to the user.
    
    Finally   ' This section is performed regardless of the above processing.
    	Console.WriteLine()
    	Console.WriteLine("This statement is always printed")
    End Try
    					
    Example 2
    ' This code shows how to catch an exception.
    Try
    	Console.WriteLine("We're going to divide 10 by 0 and see what happens...")
    	Console.WriteLine()
    
    	Dim i as Integer = 10
    	Dim j as Integer = 0
    	Dim k As Integer = i/j ' Error on this line. Control jumps to the catch block.
    
    Catch e As Exception  ' Perform code that deals with the exception
                          ' or informs the user what occurred.
            Console.WriteLine("The following error occurred:")
            Console.WriteLine( e.Message )     ' Print the error message.
            Console.WriteLine( e.Source )      ' Name of application or object
                                               ' that caused the error
            Console.WriteLine( e.StackTrace )  ' String that contains the stack 
                                               ' trace for this exception
    Finally   ' This section is performed regardless of the above processing.
            Console.WriteLine()
            Console.WriteLine("This statement is always printed")
    End Try
    					
  9. 直到该点,已处理的非特定异常特定大小写。但是,如果您事先知道哪种类型的异常将会发生,您可以捕获预期的异常,并相应地对其进行处理。可以使用多个 Catch 块捕获所有其他异常,并同时处理它们。 下面的示例对此进行了演示。
    Module Module1
    Sub Main()
    
    ' Attempt to do some file processing.
    ' This can cause a number of potential exceptions.
    ' Note that you can use the specific exceptions to get extra information about that exception,
    ' but this example focuses on showing control execution for those exceptions.
    
    Try
    	File.Create("c:/temp/test.txt")  ' Can fail for a number of reasons
    
    Catch ioe As System.IO.IOException ' This error may occur if the Temp folder does not exist.
    	Console.WriteLine("An IO error occurred. The c:\temp folder does not exist")
    
    Catch se As System.Security.SecurityException ' You do not have the appropriate permission
                                                  ' to take this action.
    	Console.WriteLine("You don't have the security permissions to take this action!")
    
    Catch e As Exception    ' Catch all other exceptions.
    	Console.WriteLine( e.ToString() )  ' Print the standard exception information.
    End Try
    End Sub
    End Module
    由于计算机的配置可能会不同,这一步中的示例可能或不可能会引发异常。如果要强制 IO 异常,更改到您的计算机上不存在的文件夹的文件路径。

参考

有关详细的信息,请参阅 Microsoft.net 框架软件开发工具包 (SDK)。

属性

文章编号: 301283 - 最后修改: 2006年12月6日 - 修订: 5.5
这篇文章中的信息适用于:
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 标准版
  • Microsoft Visual .NET 2002 标准版
关键字:?
kbmt kbvs2005swept kbvs2005applies kbhowtomaster KB301283 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 301283
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com