Обработка на изключения във VB.Net (Try Catch)

⚡ Умно обобщение

Обработката на изключения във VB.Net управлява грешки по време на изпълнение, като например деление на нула, използвайки ключовите думи Try, Catch, Finally и Throw, така че програмата да може да реагира на проблеми грациозно, вместо да се срива по време на изпълнение.

  • 🔍 изключение: Проблем, който възниква по време на изпълнение, например деление на число на нула.
  • Опитай и хвани: Try обгръща рисковия код; Catch обработва изключението, което той повдига.
  • И накрая: Блокът Finally се изпълнява независимо дали възникне изключение или не.
  • 🚦 Хвърли: Throw повдига обект за изключение, производен на класа System.Exception.
  • 🧩 Персонализирани изключения: Наследете ApplicationException, за да дефинирате свои собствени типове изключения.
  • 🤖 Помощ с изкуствен интелект: GitHub Copilot и IntelliCode генерирайте блокове Try Catch, докато пишете.

Обработка на изключения във VB.Net

Какво е изключение във VB.Net?

An изключение във VB.Net се отнася до проблем, който възниква по време на изпълнение на програмата. То е предизвикано от неочаквано обстоятелство. Добър пример е, когато извършвате операция за деление и след това разделите на нула (0). Ще бъде повдигнато изключение.

Какво представлява обработката на изключения във VB.Net?

С изключения в VB.Net, можете да прехвърлите управлението на програма от една част на друга. Във VB.Net изключенията се обработват с помощта на следните 4 ключови думи:

Ключова дума детайл
Опитвам Работата на блока Try е да идентифицира кодовия блок, за който ще бъде активирано конкретно изключение. То трябва да бъде последвано от catch блок(ове).
Улов Улавянето на изключението се извършва в този блок. Това е манипулатор на изключения, в който се обработва изключението.
Накрая Използвайте блока Finally, за да изпълните набор от изрази, независимо дали е възникнало изключение или не.
Хвърлям Изключение се хвърля след възникване на проблем. Това е работата на ключовата дума Throw.

След като ролите на тези четири ключови думи са ясни, помислете как те се комбинират в едно твърдение.

Синтаксис на Try Catch във VB.Net

Изявленията Try Catch във VB.Net се дефинират с помощта на следния синтаксис:

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

Блокът Try/Catch трябва да обгражда кода, който може да предизвика изключение. Този код е известен като защитен код. Можете да използвате множество оператори за улавяне, когато трябва да прихванете различни видове изключения.

Пример за обработка на изключения във VB.Net с Try Catch и Finally

С помощта на Try/Catch операторите можете да отделите обикновения програмен код от системата за обработка на грешки. Нека демонстрираме как да обработим изключение, използвайки ключовите думи Try, Catch и Finally.

Стъпка 1) Създайте ново конзолно приложение.

Стъпка 2) Използвайте този код:

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

Стъпка 3) Щракнете върху бутона Старт от лентата с инструменти, за да изпълните кода. Трябва да получите следния резултат:

Конзолен изход на VB.Net Try Catch Finally, показващ уловеното изключение DivideByZeroException

Ето екранна снимка на кода:

Примерен код за VB.Net Try Catch Finally, показан във Visual Studio

Обяснение на Code:

  1. Създаване на модул с име Module1.
  2. Създаване на подпроцедура с име divisionFunction с два целочислени аргумента n1 и n2. ByVal е ключова дума на VB.Net, заявяваща, че стойностите на аргументите ще бъдат предавани по стойност.
  3. Създаване на целочислена променлива с име отговор.
  4. Начало на блока Try/Catch. Трябва да обградим кода, за който подозираме, че може да предизвика изключение с този блок.
  5. Извършване на операция деление между стойностите на променливи n1 и n2. Резултатът от операцията деление се присвоява на променливата отговор. Този код може да предизвика изключение, например, когато разделим число на нула, следователно сме го заобиколили с блоковете Try/Catch.
  6. Улавяне на изключението с име DivideByZeroException и присвояване на генерираното съобщение за изключение на ex.
  7. Отпечатване на някакъв текст на конзолата за уведомяване на потребителя за типа/името на изключение, което е било повдигнато.
  8. Блокът Finally. Това ще се изпълни независимо дали е уловено изключение или не.
  9. Отпечатване на текст на конзолата, показващ резултата от операцията за разделяне.
  10. Край на блока Try, тоест край на кода за обработка на грешки.
  11. Край на подпроцедурата divisionFunction.
  12. Начало на основната подпроцедура.
  13. Извикване/извикване на подпроцедурата divisionFunction. Тук се предават стойностите на двата целочислени аргумента. Стойността на n1=4 и n2=0. Това означава, че операцията деление ще бъде 4\0, тоест n1\n2.
  14. Поставяне на пауза на прозореца на конзолата в очакване потребителят да предприеме действие, за да го затвори.
  15. Край на основната подпроцедура.
  16. Край на модула.

Дефинирани от потребителя изключения във VB.Net

VB.Net ви позволява да дефинирате свои собствени изключения. Можете да получите потребителски дефинирани класове изключения от класа ApplicationException. Нека демонстрираме това с пример:

Пример за дефинирано от потребителя изключение във VB.Net

Ето пример за потребителски дефинирано изключение във VB.Net:

Стъпка 1) Създайте ново конзолно приложение.

Стъпка 2) Използвайте следния код:

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

Стъпка 3) Щракнете върху бутона Старт от горната лента, за да изпълните кода. Трябва да получите следния резултат:

Потребителски дефинирано съобщение HeightIsZeroException на VB.Net, отпечатано на конзолата

Ето екранна снимка на кода:

Примерен код за потребителски дефиниран клас изключения във VB.Net във Visual Studio

Обяснение на Code:

  1. Създаване на модул с име Module1.
  2. Създаване на клас изключение с име HeightIsZeroException. Класът наследява целия клас ApplicationException.
  3. Създаване на подпроцедура с име New. Ще отнеме един аргумент от низ, наречен текст.
  4. Извикване на конструктора на базовия клас и предаване към него на горния аргумент.
  5. Край на новата подпроцедура.
  6. Край на класа HeightIsZeroException.
  7. Създаване на клас с име Height. Неговият модификатор за публичен достъп е Public, което означава, че ще бъде публично достъпен.
  8. Създаване на целочислена променлива с име Height и инициализиране на нейната стойност на 0.
  9. Създаване на подпроцедура с име showHeight().
  10. Проверка кога стойността на променливата Height е 0. Използвахме условието If…Then.
  11. За да хвърлите HeightIsZeroException, ако горното условие е вярно. Съобщението Намерена е нулева височина ще се покаже, когато бъде хвърлено това изключение.
  12. Частта Else, която да се изпълни, когато условието If не е вярно.
  13. Съобщение за отпечатване на конзолата, показващо височината, когато не е 0.
  14. Край на условието If.
  15. Край на подпроцедурата showHeight().
  16. Край на класа Вис.
  17. Начало на основната подпроцедура.
  18. Създаване на обект с име Height като екземпляр на класа Height.
  19. Начало на блока за обработка на изключения.
  20. Извикване на подпроцедурата showHeight(), дефинирана в класа Height. Използвахме обект от този клас за достъп до този метод. Този ред може да доведе до изключение. Затова сме го обградили с код за обработка на изключения.
  21. Улавяне на изключението HeightIsZeroException като обект ex в случай, че се случи.
  22. Съобщението за отпечатване на конзолата, когато HeightIsZeroException бъде уловено.
  23. Край на блока за обработка на изключение.
  24. Поставете на пауза прозореца на конзолата, изчаквайки потребител да предприеме действие, за да го затвори.
  25. Край на основната подпроцедура.
  26. Край на модула.

Хвърлете изключение във VB.Net

При обработката на изключения можете да изберете да генерирате обект. Обектът обаче трябва да е производен на класа System.Exception, директно или индиректно. Например:

Пример за хвърляне на изключение във VB.Net

По-долу е даден пример за изключение тип „throw“ във VB.Net:

Стъпка 1) Създайте ново конзолно приложение.

Стъпка 2) Използвайте следния код:

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

Стъпка 3) Щракнете върху бутона Старт от горната лента, за да изпълните кода. Трябва да получите следното:

Изходът на конзолата на VB.Net Throw, показващ персонализираното съобщение за изключение

Ето екранна снимка на кода:

Примерен код за изключение Throw във VB.Net с Try Catch Finally

Обяснение на Code:

  1. Създаване на модул с име Module1.
  2. Начало на основната подпроцедура.
  3. Начало на кода за обработка на грешки.
  4. Хвърляне на обект за изключение. Този код може да генерира изключение, затова сме го заобиколили с блок Try/Catch.
  5. Прихващане на изключение като обект ex, ако линията хвърля изключение.
  6. Отпечатване на съобщението за изключение на конзолата, в случай че се случи.
  7. Блокът Finally за изпълнение, независимо дали е уловено изключение или не.
  8. Съобщението за отпечатване на конзолата, когато се изпълни блокът Finally.
  9. Край на кода за обработка на изключение.
  10. Поставете конзолата на пауза за известно време в очакване потребителят да предприеме действие, за да я затвори.
  11. Край на основната подпроцедура.
  12. Край на модула.

Въпроси и Отговори

Да. Операторът Try е валиден без Catch, стига да включва блок Finally. Този формуляр Try Finally изпълнява код за почистване, но не обработва самото изключение.

Да. Избройте няколко Catch блока за обработка на различни типове изключения. Подредете ги от най-специфичния към най-малко специфичния, защото VB.Net ги проверява последователно и използва първото съвпадение.

Почти винаги. Finally се изпълнява независимо дали е хванато изключение или не, и дори след Return. Пропуска се само при End оператор или StackOverflowException.

Throw повторно повдига текущото изключение и запазва оригиналния му стек. tracд. Throw ex нулира стека trace към текущия ред, скривайки мястото, където грешката наистина е започнала. Предпочитам просто Throw.

Синтаксичната грешка се улавя от компилатора преди изпълнението на програмата. Изключение възниква по време на изпълнение и може да се обработи с блок Try Catch.

Често срещани са DivideByZeroException, NullReferenceException, IndexOutOfRangeException, FormatException и OverflowException. Всички те наследяват System.Exception и могат да бъдат уловени поотделно.

Да. Копилот на GitHub Превръща коментар на обикновен английски език в пълен блок Try Catch Finally и предлага правилния тип изключение. Винаги преглеждайте генерирания манипулатор.

Да. Visual Studio intelliCode предлага контекстно-осъзнати, цели редове завършвания за Catch клаузи и типове изключения, научени от хиляди проекти с отворен код.

Обобщете тази публикация с: