Обробка винятків у 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 має оточувати код, який може викликати виняткову ситуацію. Цей код відомий як захищений код. Ви можете використовувати кілька операторів 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. Створення цілочисельної змінної з іменем answer.
  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) Натисніть кнопку Пуск на верхній панелі, щоб виконати код. Ви маєте отримати наступний результат:

Повідомлення користувача VB.Net HeightIsZeroException, що виводиться на консоль

Ось скріншот коду:

Приклад коду класу винятків, визначених користувачем, VB.Net у Visual Studio

Пояснення Code:

  1. Створення модуля з іменем Module1.
  2. Створення класу винятків під назвою HeightIsZeroException. Клас успадковує весь клас ApplicationException.
  3. Створення підпроцедури під назвою New. Він займе один рядковий аргумент з іменем text.
  4. Виклик конструктора базового класу та передача йому наведеного вище аргументу.
  5. Кінець нової підпроцедури.
  6. Кінець класу HeightIsZeroException.
  7. Створення класу під назвою Height. Його модифікатор публічного доступу – Public, що означає, що він буде загальнодоступним.
  8. Створення цілочисельної змінної з іменем Height та ініціалізація її значення 0.
  9. Створення підпроцедури під назвою showHeight().
  10. Перевірка, коли значення змінної Height дорівнює 0. Ми використали умову If…Then.
  11. Щоб створити виняток HeightIsZeroException, якщо наведена вище умова виконується. Повідомлення Zero Height Found (Знайдено нульову висоту) буде показано, коли буде створено цей виняток.
  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, прямо чи опосередковано. Наприклад:

Приклад виняткової ситуації Throw у 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, що показує повідомлення про виняток

Ось скріншот коду:

Приклад коду винятку VB.Net Throw з 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 повторно викликає поточний виняток та зберігає його початковий стек. trace. Виконання команди ex скидає стек trace до поточного рядка, приховуючи місце, де насправді почалася помилка. Віддавайте перевагу простому Throw.

Синтаксична помилка перехоплюється компілятором перед запуском програми. Виняток виникає під час виконання програми та може бути оброблений блоком Try Catch.

Найчастішими є DivideByZeroException, NullReferenceException, IndexOutOfRangeException, FormatException та OverflowException. Усі вони успадковуються від System.Exception і можуть бути перехоплені окремо.

Так. Копілот GitHub перетворює коментар простою англійською мовою на повноцінний блок Try Catch Finally та пропонує правильний тип винятку. Завжди перевіряйте згенерований обробник.

Так. Visual Studio intelliCode пропонує контекстно-залежне, повнорядкове автодоповнення для речень Catch та типів винятків, отриманих з тисяч проектів з відкритим кодом.

Підсумуйте цей пост за допомогою: