Obsługa wyjątków w VB.Net (Try Catch)

⚡ Inteligentne podsumowanie

Obsługa wyjątków w VB.Net pozwala zarządzać błędami czasu wykonania, takimi jak dzielenie przez zero, przy użyciu słów kluczowych Try, Catch, Finally i Throw. Dzięki temu program może reagować na problemy w sposób prawidłowy, zamiast ulegać awarii w trakcie wykonywania.

  • 🔍 wyjątek: Problem pojawiający się w trakcie wykonywania programu, np. dzielenia liczby przez zero.
  • 🛡️ Spróbuj i złap: Try opakowuje ryzykowny kod; Catch obsługuje wyjątek, który on zgłasza.
  • Wreszcie: Blok Finally jest uruchamiany niezależnie od tego, czy wystąpił wyjątek.
  • 🚦 Rzucać: Throw wywołuje obiekt wyjątku pochodny od klasy System.Exception.
  • 🧩 Wyjątki niestandardowe: Dziedzicz ApplicationException, aby zdefiniować własne typy wyjątków.
  • 🤖 Pomoc AI: GitHub Copilot i IntelliCode generuj bloki Try Catch podczas pisania.

Obsługa wyjątków w VB.Net

Co to jest wyjątek w VB.Net?

An Wyjątek w VB.Net odnosi się do problemu, który pojawia się podczas wykonywania programu. Jest on spowodowany nieoczekiwaną okolicznością. Dobrym przykładem jest sytuacja, gdy wykonujesz operację dzielenia, a następnie dzielisz przez zero (0). Zostanie zgłoszony wyjątek.

Co to jest obsługa wyjątków w VB.Net?

Z wyjątkami w VB.Net, możesz przenieść kontrolę nad programem z jednej części do drugiej. W VB.Net wyjątki są obsługiwane za pomocą następujących 4 słów kluczowych:

słowo kluczowe Szczegół
Próbować Zadaniem bloku Try jest zidentyfikowanie bloku kodu, dla którego zostanie aktywowany określony wyjątek. Po nim powinien nastąpić blok(i) catch.
Przyciągaj Łapanie wyjątku odbywa się w tym bloku. Jest to procedura obsługi wyjątków, w której obsługiwany jest wyjątek.
W końcu Użyj bloku Final, aby uruchomić zestaw instrukcji niezależnie od tego, czy wystąpił wyjątek, czy nie.
Rzucać Po wystąpieniu problemu zgłaszany jest wyjątek. To jest działanie słowa kluczowego Throw.

Mając już jasność co do roli tych czterech słów kluczowych, zastanów się, jak można je łączyć w ramach jednego zdania.

Składnia Try Catch w VB.Net

Instrukcje Try Catch w VB.Net są definiowane przy użyciu poniższej składni:

Try
   [ try_Statement(s) ]
   [ Exit Try ]
[ Catch [ exception_name [ As type ] ] [ When expression ]
   [ catch_Statement(s) ]
   [ Exit Try ] ]
[ Catch ... ]
[ Finally
   [ finally_Statement(s) ] ]
End Try

Blok Try/Catch powinien otaczać kod, który może zgłosić wyjątek. Kod ten nazywany jest kodem chronionym. Jeśli chcesz przechwycić różne typy wyjątków, możesz użyć wielu instrukcji catch.

Przykład obsługi wyjątków w VB.Net z Try Catch i Final

Za pomocą instrukcji Try/Catch możesz oddzielić zwykły kod programu od systemu obsługi błędów. Pokażemy, jak obsłużyć wyjątek za pomocą słów kluczowych Try, Catch i Finally.

Krok 1) Utwórz nową aplikację konsolową.

Krok 2) Użyj tego kodu:

Module Module1
    Sub divisionFunction(ByVal n1 As Integer, ByVal n2 As Integer)
        Dim answer As Integer
        Try
            answer = n1 \ n2
        Catch ex As DivideByZeroException
            Console.WriteLine("Exception: {0}", ex)
        Finally
            Console.WriteLine("Answer is: {0}", answer)
        End Try
    End Sub
    Sub Main()
        divisionFunction(4, 0)
        Console.ReadKey()
    End Sub

End Module

Krok 3) Kliknij przycisk Start na pasku narzędzi, aby wykonać kod. Powinieneś otrzymać następujący wynik:

VB.Net Try Catch Na koniec wyjście konsoli pokazujące złapany wyjątek DivideByZeroException

Oto zrzut ekranu kodu:

Przykładowy kod funkcji VB.Net Try Catch Finally pokazany w programie Visual Studio

Wyjaśnienie Code:

  1. Tworzenie modułu o nazwie Module1.
  2. Tworzenie podprocedury o nazwie DivisionFunction z dwoma argumentami będącymi liczbami całkowitymi n1 i n2. ByVal to słowo kluczowe VB.Net stwierdzające, że wartości argumentów będą przekazywane przez wartość.
  3. Tworzenie zmiennej całkowitej o nazwie odpowiedź.
  4. Początek bloku Try/Catch. Musimy otoczyć kod, który według nas może zgłosić wyjątek w tym bloku.
  5. Wykonywanie operacji dzielenia między wartościami zmiennych n1 i n2. Wynik operacji dzielenia jest przypisywany do zmiennej answer. Ten kod może zgłosić wyjątek, na przykład gdy dzielimy liczbę przez zero, dlatego otoczyliśmy go blokami Try/Catch.
  6. Przechwycenie wyjątku o nazwie DivideByZeroException i przypisanie wygenerowanego komunikatu wyjątku do ex.
  7. Wydrukowanie tekstu na konsoli w celu powiadomienia użytkownika o typie/nazwie zgłoszonego wyjątku.
  8. Blok Wreszcie. Spowoduje to wykonanie niezależnie od tego, czy zostanie przechwycony wyjątek, czy nie.
  9. Wyświetlanie tekstu na konsoli pokazującego wynik operacji dzielenia.
  10. Koniec bloku Try, czyli koniec kodu obsługi błędów.
  11. Koniec podprocedury dzielenia.
  12. Rozpoczęcie głównego podprocedury.
  13. Wywołanie/inwokacja podprocedury divisionFunction. Wartości dwóch argumentów całkowitych są tutaj przekazywane. Wartość n1=4 i n2=0. Oznacza to, że operacja dzielenia będzie wynosić 4\0, czyli n1\n2.
  14. Wstrzymywanie okna konsoli w oczekiwaniu na podjęcie przez użytkownika działań w celu jego zamknięcia.
  15. Koniec głównego podprocedury.
  16. Koniec modułu.

Wyjątki zdefiniowane przez użytkownika w VB.Net

VB.Net pozwala definiować własne wyjątki. Klasy wyjątków zdefiniowane przez użytkownika można uzyskać z klasy ApplicationException. Zademonstrujmy to na przykładzie:

Przykład wyjątku zdefiniowanego przez użytkownika w VB.Net

Oto przykład wyjątku zdefiniowanego przez użytkownika w VB.Net:

Krok 1) Utwórz nową aplikację konsolową.

Krok 2) Użyj następującego kodu:

Module Module1

    Public Class HeightIsZeroException : Inherits ApplicationException
        Public Sub New(ByVal text As String)
            MyBase.New(text)
        End Sub
    End Class
    Public Class Height
        Dim height As Integer = 0
        Sub showHeight()
            If (height = 0) Then
                Throw (New HeightIsZeroException("Zero Height found"))
            Else
                Console.WriteLine("Height is: {0}", height)
            End If
        End Sub
    End Class
    Sub Main()
        Dim hght As Height = New Height()
        Try
            hght.showHeight()
        Catch ex As HeightIsZeroException
            Console.WriteLine("HeightIsZeroException: {0}", ex.Message)
        End Try
        Console.ReadKey()
    End Sub

End Module

Krok 3) Kliknij przycisk Start na górnym pasku, aby wykonać kod. Powinieneś otrzymać następujący wynik:

Zdefiniowany przez użytkownika komunikat VB.Net o wyjątku HeightIsZeroException wyświetlany na konsoli

Oto zrzut ekranu kodu:

Przykładowy kod klasy wyjątków zdefiniowanej przez użytkownika w języku VB.Net w programie Visual Studio

Wyjaśnienie Code:

  1. Tworzenie modułu o nazwie Module1.
  2. Tworzenie klasy wyjątku o nazwie HeightIsZeroException. Klasa dziedziczy całą klasę ApplicationException.
  3. Tworzenie podprocedury o nazwie New. Przyjmie jeden argument w postaci ciągu o nazwie tekst.
  4. Wywołanie konstruktora klasy bazowej i przekazanie mu powyższego argumentu.
  5. Zakończenie nowego podprocedury.
  6. Koniec klasy HeightIsZeroException.
  7. Tworzenie klasy o nazwie Height. Jego modyfikatorem dostępu publicznego jest Publiczny, co oznacza, że ​​będzie on publicznie dostępny.
  8. Tworzenie zmiennej całkowitej o nazwie Wysokość i inicjowanie jej wartości na 0.
  9. Tworzenie podprocedury o nazwie showHeight().
  10. Sprawdzanie, kiedy wartość zmiennej Height wynosi 0. Użyliśmy warunku If…Then.
  11. Aby zgłosić wyjątek HeightIsZeroException, jeśli powyższy warunek jest spełniony. W przypadku zgłoszenia wyjątku zostanie wyświetlony komunikat Znaleziono zerową wysokość.
  12. Część Else, która ma zostać wykonana, gdy warunek If nie jest spełniony.
  13. Wiadomość do wydrukowania na konsoli, pokazująca wysokość, gdy jest ona różna od 0.
  14. Koniec warunku If.
  15. Koniec podprocedury showHeight().
  16. Koniec zajęć Wysokość.
  17. Rozpoczęcie głównego podprocedury.
  18. Tworzenie obiektu o nazwie Height jako instancji klasy Height.
  19. Początek bloku obsługi wyjątków.
  20. Wywołanie podprocedury showHeight() zdefiniowanej w klasie Height. Użyliśmy obiektu tej klasy, aby uzyskać dostęp do tej metody. Ten wiersz może spowodować wyjątek. Dlatego otoczyliśmy go kodem obsługi wyjątków.
  21. Przechwytywanie wyjątku HeightIsZeroException jako obiektu na przykład w przypadku jego wystąpienia.
  22. Komunikat do wydrukowania na konsoli po przechwyceniu wyjątku HeightIsZeroException.
  23. Koniec bloku obsługi wyjątków.
  24. Wstrzymaj okno konsoli, czekając, aż użytkownik podejmie działanie w celu jego zamknięcia.
  25. Koniec głównego podprocedury.
  26. Koniec modułu.

Zgłoś wyjątek w VB.Net

W obsłudze wyjątków można wybrać zgłoszenie obiektu. Obiekt musi jednak pochodzić z klasy System.Exception, bezpośrednio lub pośrednio. Na przykład:

Przykład wyjątku zgłoszenia w VB.Net

Poniżej znajduje się przykład wyjątku throw w VB.Net:

Krok 1) Utwórz nową aplikację konsolową.

Krok 2) Użyj następującego kodu:

Module Module1

    Sub Main()
        Try
            Throw New ApplicationException("Throwing a custom exception")
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        Finally
            Console.WriteLine("The Finally Block")
        End Try
        Console.ReadKey()
    End Sub


End Module

Krok 3) Kliknij przycisk Start na górnym pasku, aby wykonać kod. Powinieneś otrzymać następujące informacje:

Wyjście konsoli polecenia Throw w VB.Net pokazujące niestandardowy komunikat o wyjątku

Oto zrzut ekranu kodu:

Przykładowy kod wyjątku VB.Net Throw z funkcją Try Catch Finally

Wyjaśnienie Code:

  1. Tworzenie modułu o nazwie Module1.
  2. Rozpoczęcie głównego podprocedury.
  3. Początek kodu obsługi błędów.
  4. Rzucanie obiektu wyjątku. Ten kod może generować wyjątek, dlatego otoczyliśmy go blokiem Try/Catch.
  5. Przechwytywanie wyjątku jako obiektu, np. jeśli linia zgłosi wyjątek.
  6. Drukowanie komunikatu o wyjątku na konsoli w przypadku jego wystąpienia.
  7. Blok Final uruchamiany niezależnie od tego, czy zostanie przechwycony wyjątek, czy nie.
  8. Komunikat do wydrukowania na konsoli po wykonaniu bloku Final.
  9. Koniec kodu obsługi wyjątków.
  10. Wstrzymaj konsolę na chwilę, czekając, aż użytkownik podejmie działanie w celu jej zamknięcia.
  11. Koniec głównego podprocedury.
  12. Koniec modułu.

FAQ

Tak. Instrukcja Try jest prawidłowa bez bloku Catch, o ile zawiera blok Finally. Ta forma Try Finally uruchamia kod czyszczący, ale nie obsługuje samego wyjątku.

Tak. Wypisz kilka bloków Catch do obsługi różnych typów wyjątków. Uporządkuj je od najbardziej szczegółowego do najmniej szczegółowego, ponieważ VB.Net sprawdza je po kolei i używa pierwszego dopasowania.

Prawie zawsze. Funkcja Finally jest wykonywana niezależnie od tego, czy wyjątek został wykryty, czy nie, a nawet po instrukcji Return. Jest pomijana tylko w przypadku instrukcji End lub wyjątku StackOverflowException.

Throw ponownie wywołuje bieżący wyjątek i zachowuje jego oryginalny stos trace. Rzut resetuje stos tracPrzenieś e do bieżącego wiersza, ukrywając prawdziwy początek błędu. Preferuj zwykły Throw.

Kompilator wychwytuje błąd składni przed uruchomieniem programu. Wyjątek występuje w czasie wykonywania i można go obsłużyć za pomocą bloku Try Catch.

Do częstych wyjątków należą DivideByZeroException, NullReferenceException, IndexOutOfRangeException, FormatException i OverflowException. Wszystkie dziedziczą po System.Exception i mogą być wychwytywane indywidualnie.

Tak. Drugi pilot GitHub Zamienia zwykły komentarz w pełny blok Try Catch Finally i sugeruje właściwy typ wyjątku. Zawsze sprawdzaj wygenerowany handler.

Tak. Visual Studio inteligencjaCode oferuje zależne od kontekstu, uzupełnianie całych wierszy dla klauzul Catch i typów wyjątków, opracowane na podstawie tysięcy projektów open source.

Podsumuj ten post następująco: