Обробка Помилок
Ви могли зустрічати термін помилка виконання у попередніх розділах. Помилка виконання — це помилка, яка виникає під час виконання програми, звідси й назва "помилка виконання".
Зазвичай, коли виникає помилка виконання, програма аварійно завершує роботу або перестає відповідати.
Компілятор може допомогти виявити більшість помилок у коді, але помилки виконання здебільшого непередбачувані й часто залежать від невизначених параметрів.
Наприклад, якщо шлях до файлу, переданий у StreamReader
, є недійсним або не існує, виникне помилка виконання, і програма аварійно завершить роботу. Тому подібний небезпечний код часто розміщують у блоках try-catch
, щоб спробувати виконати код, а у разі невдачі — перехопити та обробити помилку замість аварійного завершення програми.
Нижче наведено синтаксис блоку try-catch
:
index.cs
1234567try { // code to try } catch (Exception errorVar) { // code to handle error }
Тут Exception
— це ключове слово, яке представляє тип даних Exception.
Приклад
index.cs
1234567891011121314151617using System; using System.IO; class Program { static void Main(string[] args) { try { new StreamWriter("C:/a/random/path/that/does/not/exist.txt"); } catch(Exception error) { Console.WriteLine(error.Message); } } }
Можна опустити частину (Exception error)
у виразі catch
, якщо змінна error
не використовується.
Наведено деякі поширені випадки виникнення помилок під час виконання:
Ділення на нуль
index.cs
123456789101112131415161718using System; class Program { static void Main(string[] args) { try { int a = 100; int b = 0; int result = a / b; } catch { Console.WriteLine("ERROR: Division by Zero."); } } }
Недійсний індекс масиву або списку
index.cs
1234567891011121314151617using System; class Program { static void Main(string[] args) { try { var exampleArray = new int[10]; Console.WriteLine(exampleArray[20]); } catch { Console.WriteLine("ERROR: The array index is out of bounds."); } } }
Ключ не знайдено (для словників):
index.cs
123456789101112131415161718192021using System; using System.Collections.Generic; class Program { static void Main(string[] args) { try { Dictionary<string, string> myDict = new Dictionary<string, string> { { "key1", "value1" } }; Console.WriteLine(myDict["key2"]); } catch { Console.WriteLine("Error: Key not found"); } } }
Блок finally
Існує також додатковий блок коду finally
, який виконується після виконання блоку catch
:
index.cs
12345678910111213141516171819202122232425using System; using System.Collections.Generic; class Program { static void Main(string[] args) { try { Dictionary<string, string> myDict = new Dictionary<string, string> { { "key1", "value1" } }; Console.WriteLine(myDict["key2"]); } catch { Console.WriteLine("Error: Key not found"); } finally { Console.WriteLine("This line will show after the error"); } } }
1. Яким буде вивід наступної програми?
2. Яке призначення блоку finally
у C#?
3. Яке з наступних тверджень є правильним щодо блоку try-catch
у C#?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Can you explain how the try-catch block works with an example?
What are some best practices for handling runtime errors?
Can you list other common runtime errors besides the ones mentioned?
Awesome!
Completion rate improved to 2.04
Обробка Помилок
Свайпніть щоб показати меню
Ви могли зустрічати термін помилка виконання у попередніх розділах. Помилка виконання — це помилка, яка виникає під час виконання програми, звідси й назва "помилка виконання".
Зазвичай, коли виникає помилка виконання, програма аварійно завершує роботу або перестає відповідати.
Компілятор може допомогти виявити більшість помилок у коді, але помилки виконання здебільшого непередбачувані й часто залежать від невизначених параметрів.
Наприклад, якщо шлях до файлу, переданий у StreamReader
, є недійсним або не існує, виникне помилка виконання, і програма аварійно завершить роботу. Тому подібний небезпечний код часто розміщують у блоках try-catch
, щоб спробувати виконати код, а у разі невдачі — перехопити та обробити помилку замість аварійного завершення програми.
Нижче наведено синтаксис блоку try-catch
:
index.cs
1234567try { // code to try } catch (Exception errorVar) { // code to handle error }
Тут Exception
— це ключове слово, яке представляє тип даних Exception.
Приклад
index.cs
1234567891011121314151617using System; using System.IO; class Program { static void Main(string[] args) { try { new StreamWriter("C:/a/random/path/that/does/not/exist.txt"); } catch(Exception error) { Console.WriteLine(error.Message); } } }
Можна опустити частину (Exception error)
у виразі catch
, якщо змінна error
не використовується.
Наведено деякі поширені випадки виникнення помилок під час виконання:
Ділення на нуль
index.cs
123456789101112131415161718using System; class Program { static void Main(string[] args) { try { int a = 100; int b = 0; int result = a / b; } catch { Console.WriteLine("ERROR: Division by Zero."); } } }
Недійсний індекс масиву або списку
index.cs
1234567891011121314151617using System; class Program { static void Main(string[] args) { try { var exampleArray = new int[10]; Console.WriteLine(exampleArray[20]); } catch { Console.WriteLine("ERROR: The array index is out of bounds."); } } }
Ключ не знайдено (для словників):
index.cs
123456789101112131415161718192021using System; using System.Collections.Generic; class Program { static void Main(string[] args) { try { Dictionary<string, string> myDict = new Dictionary<string, string> { { "key1", "value1" } }; Console.WriteLine(myDict["key2"]); } catch { Console.WriteLine("Error: Key not found"); } } }
Блок finally
Існує також додатковий блок коду finally
, який виконується після виконання блоку catch
:
index.cs
12345678910111213141516171819202122232425using System; using System.Collections.Generic; class Program { static void Main(string[] args) { try { Dictionary<string, string> myDict = new Dictionary<string, string> { { "key1", "value1" } }; Console.WriteLine(myDict["key2"]); } catch { Console.WriteLine("Error: Key not found"); } finally { Console.WriteLine("This line will show after the error"); } } }
1. Яким буде вивід наступної програми?
2. Яке призначення блоку finally
у C#?
3. Яке з наступних тверджень є правильним щодо блоку try-catch
у C#?
Дякуємо за ваш відгук!