你目前正处于脱机状态,正在等待 Internet 重新连接

如何在 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 exceptionFinally   ' This section is performed regardless of the above processing.        Console.WriteLine()        Console.WriteLine("This statement is always printed")End Try					
  9. 直到该点,已处理的非特定异常特定大小写。但是,如果您事先知道哪种类型的异常将会发生,您可以捕获预期的异常,并相应地对其进行处理。可以使用多个 Catch 块捕获所有其他异常,并同时处理它们。 下面的示例对此进行了演示。
    Module Module1Sub 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 reasonsCatch 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 TryEnd SubEnd Module
    由于计算机的配置可能会不同,这一步中的示例可能或不可能会引发异常。如果要强制 IO 异常,更改到您的计算机上不存在的文件夹的文件路径。
参考
有关详细的信息,请参阅 Microsoft.net 框架软件开发工具包 (SDK)。
错误处理尝试...catch...最后

警告:本文已自动翻译

属性

文章 ID:301283 - 上次审阅时间:12/06/2006 23:18:25 - 修订版本: 5.5

Microsoft Visual Basic 2005, Microsoft Visual Basic .NET 2003 标准版, Microsoft Visual .NET 2002 标准版

  • kbmt kbvs2005swept kbvs2005applies kbhowtomaster KB301283 KbMtzh
反馈