C#/VB.NET 全ての例外処理をキャッチする方法

C#やVB.NETで全ての例外処理をキャッチする方法について解説します。

全ての例外処理をキャッチするにはどうしたらいいですか?

 Try-catchステートメントでExceptionクラスを指定すると全ての例外を処理でします。

目次

受講者数No.1!初心者からプロへ導く信頼のスクール

    短期間で習得可能!未経験から実践力を磨く充実のプログラム

    今なら無料相談でAmazonギフトカードがもらえる!

    すべての例外をキャッチして対処する

     すべての例外を処理する方法として、Try-catchステートメントが利用できます。特に、catchステートメントにExceptionクラスを指定することで、実行中に発生したあらゆる例外を対処することができます。

    Try
    {
    	処理
    }catch ( Exception 変数 )
    {
       例外処理
    }
    Try
        処理
    Catch ex As Exception
        例外処理
    End Try

      Exceptionクラスはすべての例外の基底クラスです。そのため、CatchブロックにExceptionクラスを指定することで、あらゆる種類の例外を処理することができます。

    ただし、複数のCatchブロックがある場合は、先に記述されたCatchブロックから処理が行われるため、最後のCatchブロックにExceptionクラスを記述することが推奨されます。

    これにより、その例外を処理できなかったすべての例外を処理することができるようになります。

    例外を発生させてTry-Catchを利用するサンプル

     以下は、わざと例外を発生させてそれをキャッチするサンプルです。

    using System;
    
    namespace ExceptionSample
    {
        class Program
        {
            static void Main(string[] args)
            {
                try
                {
                    // 例外をスローする可能性があるコード
                    int num = int.Parse("abc");
                }
                catch (FormatException ex)
                {
                    // FormatException例外を処理するコード
                    Console.WriteLine("数値の変換に失敗しました。");
                }
                catch (Exception ex)
                {
                    // その他の例外を処理するコード
                    Console.WriteLine("予期しないエラーが発生しました。");
                }
                finally
                {
                    // 例外の有無にかかわらず、必ず実行されるコード
                    Console.WriteLine("プログラムを終了します。");
                }
            }
        }
    }
    Imports System
    
    Module Module1
    
        Sub Main()
            Try
                ' 例外をスローする可能性があるコード
                Dim num As Integer = Integer.Parse("abc")
            Catch ex As FormatException
                ' FormatException例外を処理するコード
                Console.WriteLine("数値の変換に失敗しました。")
            Catch ex As Exception
                ' その他の例外を処理するコード
                Console.WriteLine("予期しないエラーが発生しました。")
            Finally
                ' 例外の有無にかかわらず、必ず実行されるコード
                Console.WriteLine("プログラムを終了します。")
            End Try
        End Sub
    
    End Module

     上記のサンプルでは、try ステートメント内で int.Parse メソッドを使用して文字列を数値に変換しようとしています。しかし、文字列が数値として正しくないため、FormatException例外がスローされます。

     そのため、 catch ステートメントでFormatException例外を処理するコードが実行されます。

    CHECK

     複数の catch ステートメントを使用することで、異なるタイプの例外を処理することができます。
    また、 finally ステートメントを使用することで、例外の有無にかかわらず、必ず実行されるコードを記述することができます。

    例外のログ記録を行う方法

     例外処理を行ったときには、ログを記録することが大切です。これによって、例外が発生した原因をトレースしやすくなります。また、エラーが発生したときにユーザーに通知することもできます。ログ記録には、System.Diagnostics.Traceクラスを使うのが一般的です。

    下記のサンプルコードを使って、ログ記録の方法を説明します。

    using System;
    using System.Diagnostics;
    
    namespace ExceptionHandlingExample
    {
        class Program
        {
            static void Main(string[] args)
            {
                try
                {
                    int x = 0;
                    int y = 10 / x;
                }
                catch (Exception ex)
                {
                    Trace.WriteLine("An error occured: " + ex.Message);
                    Trace.WriteLine("Stack trace: " + ex.StackTrace);
                }
            }
        }
    }
    Imports System
    Imports System.Diagnostics
    
    Namespace ExceptionHandlingExample
        Class Program
            Shared Sub Main(args As String())
                Try
                    Dim x As Integer = 0
                    Dim y As Integer = 10 / x
                Catch ex As Exception
                    Trace.WriteLine("An error occured: " & ex.Message)
                    Trace.WriteLine("Stack trace: " & ex.StackTrace)
                End Try
            End Sub
        End Class
    End Namespace

    複数の例外処理を発生させる方法

     複数の例外が発生することもあります。このような場合、try-catchブロックを複数設定することで、各例外に対応する処理を行うことができます。

     さらに、catchブロックには特定の例外タイプを指定することもできます。このように、各例外に応じた処理を行うことで、効率的な例外処理を実現することができます。

    下記のサンプルコードを使って、例外処理の方法を説明します。

    using System;
    
    namespace ExceptionHandlingExample
    {
        class Program
        {
            static void Main(string[] args)
            {
                try
                {
                    int x = 0;
                    int y = 10 / x;
                }
                catch (DivideByZeroException ex)
                {
                    Console.WriteLine("An error occured: " + ex.Message);
                    Console.WriteLine("Error type: Divide by zero error");
                }
                catch (Exception ex)
                {
                    Console.WriteLine("An error occured: " + ex.Message);
                    Console.WriteLine("Error type: General error");
                }
            }
        }
    }
    Imports System
    
    Namespace ExceptionHandlingExample
        Class Program
            Shared Sub Main(args As String())
                Try
                    Dim x As Integer = 0
                    Dim y As Integer = 10 / x
                Catch ex As DivideByZeroException
                    Console.WriteLine("An error occured: " & ex.Message)
                    Console.WriteLine("Error type: Divide by zero error")
                Catch ex As Exception
                    Console.WriteLine("An error occured: " & ex.Message)
                    Console.WriteLine("Error type: General error")
                End Try
            End Sub
        End Class
    End Namespace

    上記のサンプルコードでは、try-catchブロックを2つ設定しています。

     各catchブロックでは、特定の例外タイプ(DivideByZeroExceptionまたはException)に応じた処理を行っています。このように、各例外に応じた処理を行うことで、効率的な例外処理を実現することができます。

    リスキリングでキャリアアップしてみませんか?

    リスキリング(学び直し)は、経済産業省が推奨しており、

    今だけ、最大70%のキャッシュバックを受けることができます。

    リスキリング 給付金が出るスクール紹介

    最大70%の給付金が出るおすすめのプログラミングスクール!

    国策で予算が決められているため申し込みが多い場合は早期に終了する可能性があります!

    興味のある方はすぐに確認しましょう。

    まとめ

    全ての例外処理をキャッチする方法について解説しました。

    • すべての例外を処理する方法として、Try-catchステートメントが利用できます
    • CatchブロックにExceptionクラスを指定することで、あらゆる種類の例外を処理することができます。
    • ログ記録には、System.Diagnostics.Traceクラスを使うのが一般的です。
    • try-catchブロックを複数設定することで、各例外に対応する処理を行うことができます。
    • catchブロックには特定の例外タイプを指定することもできます。

    全ての例外処理をキャッチするにはどうしたらいいですか?

     Try-catchステートメントでExceptionクラスを指定すると全ての例外を処理でします。

    よかったらシェアしてね!
    • URLをコピーしました!
    • URLをコピーしました!
    目次