Visual Basic 2005 または Visual Basic .NET で例外をキャッチする方法

文書翻訳 文書翻訳
文書番号: 301283 - 対象製品
この記事は、以前は次の ID で公開されていました: JP301283
Microsoft Visual C# 2005 または Microsoft Visual C# .NET については、次の資料を参照してください。308345

Microsoft Visual Basic 6.0 については、次の資料を参照してください。191474
すべて展開する | すべて折りたたむ

目次

概要

例外のキャッチと処理は、プログラミングでの標準的な作業です。この資料では、try-catch-finally ブロックを使用して例外をキャッチする方法について説明します。try-catch-finally ブロックは、例外が発生する可能性がある任意のコードを囲む "ラッパー" です。

try-catch-finally ブロックは以下の部分で構成されます。
  • 例外をスローする可能性があるコードをすべて try ブロックの内部に配置します。
  • 例外がスローされた場合、catch ブロックに入り、プログラムで適切な回復操作を実行したり、ユーザーに警告したりすることができます。
  • finally ブロックのコードは常に実行され、例外の発生後クリーンアップを実行できます。finally ブロックは省略可能です。

必要条件

推奨する必要なハードウェア、ソフトウェア、ネットワーク インフラストラクチャ、および Service Pack は、次のとおりです。
  • Microsoft Windows Server 2003、Microsoft Windows 2000 Professional、Windows 2000 Server、Windows 2000 Advanced Server、または Microsoft Windows NT 4.0 Server
  • Microsoft Visual Basic 2005 または Microsoft Visual Basic .NET

手順の例

  1. Visual Basic .NET または Visual Basic 2005 でコンソール アプリケーションを新規作成します。
  2. Sub Main プロシージャに、以下のようなコード サンプルを挿入します。このサンプルでは 3 つの変数の宣言と初期化を行っており、このうち "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. エラーの有無にかかわらずクリーンアップや後処理が必要な場合は、try-catch-finally ステートメントの finally 部分を使用します。このステートメントの finally 部分のコードは、例外の有無にかかわらず必ず実行されます。次のコードにより、エラーが発生しない場合でも、コンソールに "This statement is always printed" と表示されます。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
    					
    例 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
    コンピュータの構成の違いにより、この手順のサンプルで例外がスローされる場合とされない場合があります。強制的に入出力の例外を起こす場合は、ファイル パスをコンピュータに存在しないフォルダに変更します。

関連情報

詳細については、Microsoft .NET Framework SDK (Software Development Kit) を参照してください。

プロパティ

文書番号: 301283 - 最終更新日: 2006年12月21日 - リビジョン: 5.4
この資料は以下の製品について記述したものです。
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
キーワード:?
kbvs2005swept kbvs2005applies kbhowtomaster KB301283
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

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