Що таке Runtime Exception: просте пояснення без програмістського туману

5 хв читання Антон Сопраненко
Що таке Runtime Exception: просте пояснення без програмістського туману
Антон Сопраненко

Антон Сопраненко

Автор матеріалу

Повідомлення на кшталт Runtime Exception, Unhandled exception або просто «програма завершила роботу через помилку» виглядає так, ніби комп’ютер говорить загадками. Насправді сенс доволі простий: програма почала працювати, але під час виконання натрапила на ситуацію, з якою не змогла впоратися.

Українською це можна перекласти як «виняток під час виконання». Слово «виняток» тут не означає щось рідкісне чи містичне. У програмуванні так називають сигнал: «сталося щось неочікуване, нормальний шлях виконання більше не підходить».

Зміст

Runtime Exception простими словами

Уявіть, що ви дали людині інструкцію:

  1. Відкрий холодильник.
  2. Візьми молоко.
  3. Налий у склянку.

Поки все на місці, інструкція працює. Але якщо холодильник порожній, людина не може виконати другий крок. Вона має або повідомити про проблему, або змінити план: взяти воду, піти в магазин, запитати вас, що робити далі.

Програма працює схоже. Вона виконує інструкції одна за одною. Runtime Exception виникає тоді, коли під час цієї роботи з’являється проблема, яку код не передбачив або не обробив.

Наприклад:

  • програма намагається відкрити файл, якого немає;
  • ділить число на нуль;
  • очікує інтернет-з’єднання, але мережа зникла;
  • звертається до порожнього значення там, де мав бути об’єкт;
  • отримує від користувача текст замість числа;
  • не має прав доступу до потрібної папки чи пристрою.

Усі ці ситуації можуть трапитися не тоді, коли програму пишуть, а саме тоді, коли її запускають. Звідси й слово runtime — «час виконання».

Чим це відрізняється від звичайної помилки в коді

Є помилки, які інструменти розробника можуть помітити ще до запуску програми. Наприклад, якщо в коді пропущена дужка або команда написана з грубою синтаксичною помилкою, програма може взагалі не стартувати. Це схоже на рецепт, у якому речення обірване посередині: його неможливо нормально прочитати.

Runtime Exception інший. Програма може виглядати правильною, успішно запускатися і навіть працювати деякий час. Але за певних умов вона заходить у глухий кут.

Простий приклад: калькулятор має функцію ділення. Сам код може бути написаний правильно. Але якщо користувач введе 10 / 0, виникне проблема, бо математично ділення на нуль не має звичайного результату. Це не обов’язково помилка «граматики» програми — це неочікувана ситуація під час її використання.

Чому програма іноді просто закривається

У багатьох мовах програмування виняток можна «зловити» й обробити. Тобто програма може сказати: «Так, файл не знайдено. Покажу користувачу зрозуміле повідомлення і запропоную вибрати інший файл».

Але якщо виняток ніхто не обробив, він піднімається вище по ланцюжку виконання. Якщо зрештою не знаходиться частина програми, яка знає, що з ним робити, програма аварійно завершується. Саме тоді користувач бачить різкі повідомлення на кшталт Unhandled Runtime Exception.

Це схоже на офісну ситуацію: працівник отримав нестандартний запит, передав керівнику, той — ще вище, але ніхто не взяв відповідальність за рішення. У результаті процес зупинився.

Чи завжди Runtime Exception означає, що програма погана

Не обов’язково. Частина таких помилок виникає через справді недопрацьований код. Але інколи причина зовнішня:

  • пошкоджений файл;
  • нестача пам’яті;
  • конфлікт із драйвером або розширенням;
  • нестабільний інтернет;
  • зміна налаштувань системи;
  • відсутній компонент, який програма очікувала знайти.

Добре написана програма намагається передбачити типові проблеми й показати людське повідомлення: «Не вдалося відкрити файл», «Перевірте з’єднання», «Недостатньо місця на диску». Але неможливо ідеально передбачити кожну комбінацію пристроїв, даних, розширень, прав доступу та дій користувача.

Саме тому навіть якісні програми іноді падають. Різниця в тому, як часто це стається і наскільки зрозуміло вони пояснюють причину.

Приклад із повсякденного життя

Уявіть банкомат. Його програма має багато сценаріїв: вставити картку, ввести PIN, вибрати суму, видати гроші, надрукувати чек. Але під час виконання може статися несподіване:

  • у банкоматі закінчився папір;
  • зв’язок із банком тимчасово зник;
  • купюри застрягли;
  • користувач забрав картку не в той момент;
  • рахунок заблокований.

Якщо розробники передбачили ситуацію, банкомат покаже нормальне повідомлення. Якщо ні — система може зависнути або перейти в аварійний режим. У програмі на комп’ютері Runtime Exception працює за тим самим принципом: неочікувана подія порушує нормальний сценарій.

Що робити користувачу, якщо з’явилась така помилка

Якщо ви не програміст, вам не треба розуміти весь стек помилки. Але кілька практичних кроків допоможуть:

  1. Перезапустіть програму. Разовий збій може більше не повторитися.
  2. Збережіть або сфотографуйте текст помилки. Особливо важливі назва програми, код помилки, назва файлу або рядок на кшталт NullReferenceException, TypeError, RuntimeError.
  3. Перевірте оновлення. Розробники часто виправляють такі збої в нових версіях.
  4. Згадайте, що змінилося перед помилкою. Новий файл, плагін, драйвер, оновлення системи чи незвична дія можуть бути підказкою.
  5. Спробуйте інший файл або простіший сценарій. Якщо програма падає лише з одним документом, проблема може бути саме в ньому.
  6. Не ігноруйте повторювані збої. Якщо помилка стабільна, варто звернутися в підтримку або пошукати рішення за точним текстом.

Для розробника повідомлення про виняток — це не просто «щось зламалося», а слід. У ньому часто є назва типу помилки й місце в коді, де вона сталася. Документація мов програмування, наприклад розділ MDN про об’єкт Error у JavaScript або офіційний опис помилок і винятків у Python, пояснює, як такі ситуації передаються програмі.

Чому не можна просто «заборонити» всі винятки

Може здатися, що найкраще рішення — зробити так, щоб Runtime Exception ніколи не виникав. Але винятки потрібні. Вони дозволяють програмі не мовчати, коли щось пішло не так.

Без такого механізму програма могла б продовжити роботу з неправильними даними. Наприклад, фінансова програма не повинна «якось приблизно» рахувати переказ, якщо не отримала відповідь від банку. Краще чесно зупинити операцію й повідомити про збій, ніж створити неправильний результат.

Інша справа — виняток треба обробляти. Хороший код не просто падає, а переводить технічну проблему в зрозумілу дію: повторити запит, попросити інші дані, записати лог, показати користувачу безпечне повідомлення.

Коротко

Runtime Exception — це помилка, яка виникає не під час написання чи перевірки коду, а під час реальної роботи програми. Вона означає, що програма натрапила на ситуацію, для якої нормальний сценарій не спрацював.

Для користувача це сигнал зберегти текст помилки, перевірити оновлення й помітити, за яких умов збій повторюється. Для розробника — підказка, де програмі бракує перевірки, обробки винятку або зрозумілого повідомлення.

Найпростіша формула така: Runtime Exception — це не «програма працювала неправильну кількість часу», а «під час роботи сталося щось, що код не зміг нормально пережити».

Схожі статті