Обробка Помилок
Ви могли зустрічати термін помилка виконання у попередніх розділах. Помилка виконання — це помилка, яка виникає під час виконання програми, звідси й назва "помилка виконання".
Зазвичай, коли виникає помилка виконання, програма аварійно завершує роботу або перестає відповідати.
Компілятор може допомогти, вказавши на більшість помилок у нашому коді, але помилки виконання здебільшого непередбачувані й часто залежать від невизначених параметрів.
Наприклад, якщо шлях до файлу, переданий у 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. Блок finally завжди буде виконаний після блоків try та catch, незалежно від того, чи була викликана виняткова ситуація. Це гарантує, що будь-який код у блоці finally виконується щоразу, що робить його корисним для завдань, таких як закриття файлів або звільнення ресурсів.
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#?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
What are some other examples of runtime errors?
Can you explain how the try-catch block works with a code example?
What is the difference between compile-time and runtime errors?
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. Блок finally завжди буде виконаний після блоків try та catch, незалежно від того, чи була викликана виняткова ситуація. Це гарантує, що будь-який код у блоці finally виконується щоразу, що робить його корисним для завдань, таких як закриття файлів або звільнення ресурсів.
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#?
Дякуємо за ваш відгук!