Який оператор використовується для викиду виключень JavaScript. JavaScript: Винятки. Обробка винятків та умовні конструкції

Конструкція try...catch дозволяє перевіряти блок коду на наявність помилок.

JavaScript - Перехоплення Помилок

При перегляді Інтернет сторінок в інтернеті всі ми стикалися з сигнальним вікном JavaScript, що говорить нам, що сталася помилка часу виконання і запитує "Чи не хочете перейти до налагодження?". Повідомлення про помилку на зразок цього може бути корисним для розробників, але не для користувачів. Коли користувачі бачать помилки, вони зазвичай залишають Інтернет сторінку.

Цей урок навчить вас, як перехоплювати та обробляти повідомлення про помилки JavaScript, тому ви не втратите ваших глядачів.

Конструкція try ... catch

Конструкція try...catch дозволяє вам перевіряти блок коду на наявність помилок. Блок try містить код, який виконуватиметься і перевірятиметься, а блок catch містить код, який буде виконано при виникненні помилок.

Синтаксис
try
{
//Запустити деякий код тут
}
catch(err)
{
//Обробка помилок тут
}

Зауважте, що try...catch пишеться в нижньому регістрі (маленькими літерами). Використання великих букв згенерує помилку JavaScript!

Приклади

Приклад нижче, як передбачається, виведе спливаюче вікно "Ласкаво просимо гість!" при натисканні кнопки миші. Однак, є помилка у функції message(). alert() надруковано як adddlert(). Виникає помилка JavaScript. Блок catch перехоплює помилку та виконує додатковий код для її обробки. Код відображає повідомлення користувача про помилку, що інформує користувача, що сталося:

Наступний приклад використовує вікно підтвердження, щоб показати повідомлення користувача, що говорить користувачам, що вони можуть натиснути OK, щоб продовжити, або натиснути Скасувати, щоб перейти на головну сторінку. Якщо метод повертає false, користувач натиснув Скасувати і код перенаправляє користувача. Якщо метод повертає true, код нічого не робить:

приклад



var txt="";
function message()
{
try
{

}
catch(err)
{

If(!confirm(txt))
{
document.location.href="http://сайт/";
}
}
}


Останнє оновлення: 23.10.2018

Іноді під час виконання програми виникають помилки, які важко передбачити чи передбачати, інколи ж зовсім неможливо. Наприклад, при передачі файлу через мережу може несподівано обірватися мережне підключення. такі ситуації називаються винятками. Мова C# надає розробникам можливості обробки таких ситуацій. Для цього C# призначена конструкція try...catch...finally .

Try ( ) catch ( ) finally ( )

При використанні блоку try...catch..finally спочатку виконуються всі інструкції у блоці try . Якщо в цьому блоці не виникло винятків, то після виконання починає виконуватися блок finally . І потім конструкція try..catch..finally завершує свою роботу.

Якщо ж у блоці try раптом виникає виняток, то звичайний порядок виконання зупиняється, і середовище CLR починає шукати блок catch, який може опрацювати цей виняток. Якщо потрібний блок catch знайдений, він виконується, і після його завершення виконується блок finally.

Якщо потрібний блок catch не знайдено, то у разі виключення програма аварійно завершує своє виконання.

Розглянемо наступний приклад:

Class Program ( static void Main(string args) ( int x = 5; int y = x / 0; Console.WriteLine($"Результат: (y)"); Console.WriteLine("Кінець програми"); Console.Read (); ) )

У разі відбувається розподіл числа на 0, що призведе до генерації винятку. І при запуску програми в режимі налагодження ми побачимо у Visual Studio віконце, яке повідомляє про виключення:

У цьому віконці бачимо, що виник виняток, який представляє тип System.DivideByZeroException , тобто спроба поділу на нуль. За допомогою пункту View Details можна переглянути детальнішу інформацію про виключення.

І в цьому випадку єдине, що нам залишається, це завершити виконання програми.

Щоб уникнути такого аварійного завершення програми, слід використовувати для обробки винятків конструкцію try...catch...finally . Так, перепишемо приклад так:

Class Program ( static void Main(string args) ( try ( int x = 5; int y = x / 0; Console.WriteLine($"Результат: (y)"); ) catch ( Console.WriteLine("Виник виняток!)) "); ) finally ( Console.WriteLine("Блок finally"); ) Console.WriteLine("Кінець програми"); Console.Read(); ) )

В даному випадку у нас знову ж таки виникне виняток у блоці try, тому що ми намагаємося розділити на нуль. І дійшовши до рядка

Int y = x/0;

виконання програми зупиниться. CLR знайде блок catch і передасть керування блоку.

Після блоку catch буде виконуватись блок finally.

Виник виняток! Блок finally Кінець програми

Таким чином, програма, як і раніше, не виконуватиме поділ на нуль і відповідно не виводитиме результат цього поділу, але тепер вона не буде аварійно завершуватися, а виняток буде оброблятися в блоці catch.

Слід зазначити, що у цій конструкції обов'язковий блок try . За наявності блоку catch ми можемо опустити блок.

Try ( int x = 5; int y = x / 0; Console.WriteLine($"Результат: (y)"); ) catch ( Console.WriteLine("Виник виняток!"); )

І, навпаки, за наявності блоку finally ми можемо опустити блок catch і не обробляти виняток:

Try ( int x = 5; int y = x / 0; Console.WriteLine($"Результат: (y)"); ) finally ( Console.WriteLine("Блок finally"); )

Однак, хоча з погляду синтаксису C# така конструкція цілком коректна, проте, оскільки CLR не зможе знайти потрібний блок catch, виняток не буде оброблено, і програма аварійно завершиться.

Обробка винятків та умовні конструкції

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

Static void Main(string args) ( Console.WriteLine("Введіть число"); int x = Int32.Parse(Console.ReadLine()); x *= x; Console.WriteLine("Квадрат числа: " + x); Console.Read(); )

Якщо користувач введе не число, а рядок, інші символи, то програма випаде в помилку. З одного боку, тут саме та ситуація, коли можна застосувати блок try..catch, щоб обробити можливу помилку. Однак набагато оптимальніше було б перевірити допустимість перетворення:

Static void Main(string args) ( Console.WriteLine("Введіть число"); int x; string input = Console.ReadLine(); if (Int32.TryParse(input, out x)) ( x *= x; Console. WriteLine("Квадрат числа: " + x); ) else ( Console.WriteLine("Некоректне введення"); ) Console.Read();

Метод Int32.TryParse() повертає true якщо перетворення можна здійснити, і false - якщо не можна. При допустимості перетворення змінна x міститиме введене число. Так, не використовуючи try...catch, можна обробити можливу виняткову ситуацію.

З погляду продуктивності використання блоків try..catch більш накладно, ніж застосування умовних конструкцій. Тому, по можливості, замість try..catch краще використовувати умовні конструкції на перевірку виняткових ситуацій.

У мові T-SQL, як і в багатьох інших мовах програмування, є можливість відслідковувати і перехоплювати помилки, сьогодні ми з Вами розглянемо конструкцію TRY CATCH, за допомогою якої ми можемо обробляти виняткові ситуації, тобто. непередбачені помилки.

Як Ви вже зрозуміли, тут йтиметься не про синтаксичні помилки, про які нам повідомляє SQL сервер ще до початку виконання самих SQL інструкцій, а про помилки, які можуть виникнути на тій чи іншій ділянці коду за певних умов.

Найпростіший приклад - це розподіл на нуль, як Ви знаєте, ділити на нуль не можна, але ця цифра може виникнути в операціях поділу. Також існують інші помилки, які можуть виникнути в операціях над нестандартними, некоректними даними, хоча ті ж самі операції зі звичайними даними виконуються без будь-яких помилок.

Тому в мові Transact-SQL існує спеціальна конструкція TRY ... CATCH, вона з'явилася в 2005 версії SQL сервера, яка використовується для обробки помилок. Якщо хтось знайомий з іншими мовами програмування, то Вам ця конструкція швидше за все знайома, тому що вона використовується в багатьох мовах програмування.

Примітка! Для більш детального вивчення мови T-SQL програмістам-початківцям рекомендую почитати книгу Шлях програміста T-SQL. Самовчитель з мови Transact-SQL.

Конструкція TRY CATCH у T-SQL

TRY CATCH – це конструкція Transact-SQL для обробки помилок. Все, що Ви хочете перевіряти на помилки, тобто. код, в якому можуть виникнути помилки, Ви поміщаєте в блок TRY. Початок блоку позначається інструкцією BEGIN TRY, а закінчення блоку, відповідно, END TRY.

Все, що Ви хочете виконувати у разі помилки, тобто. ті інструкції, які повинні виконатися, якщо в блоці TRY виникла помилка, Ви поміщаєте до блоку CATCH, його початок позначається BEGIN CATCH, а закінчення END CATCH. Якщо жодних помилок у блоці TRY не виникло, то блок CATCH пропускається та виконуються інструкції, що йдуть за ним. Якщо помилки виникли, то виконуються інструкції в блоці CATCH, а після виконуються інструкції, що йдуть за цим блоком, іншими словами, всі інструкції, що йдуть за блоком CATCH, будуть виконані, якщо, звичайно ж, ми примусово не завершили виконання пакета в блоці CATCH.

Сам блок CATCH не передає жодних відомостей про виявлені помилки в додаток, якщо це потрібно, наприклад, дізнатися номер або опис помилки, то для цього Ви можете використовувати інструкції SELECT, RAISERROR або PRINT в блоці CATCH.

Важливі моменти для конструкції TRY CATCH в T-SQL
  • Блок CATCH повинен йти одразу ж за блоком TRY, між цими блоками розміщення інструкцій не допускається;
  • TRY CATCH перехоплює всі помилки з кодом серйозності, більшим за 10, які не закривають з'єднання з базою даних;
  • У конструкції TRY…CATCH Ви можете використовувати лише один пакет та один блок SQL інструкцій;
  • Конструкція TRY…CATCH може бути вкладеною, наприклад, у блоці TRY може бути ще одна конструкція TRY…CATCH, або у блоці CATCH Ви можете написати обробник помилок на випадок виникнення помилок у самому блоці CATCH;
  • Оператор GOTO не можна використовувати для входу в блоки TRY або CATCH, він може бути використаний тільки для переходу до міток усередині блоків TRY або CATCH;
  • Обробка помилок TRY…CATCH у функціях користувача не підтримується;
  • Конструкція TRY…CATCH не опрацьовує такі помилки: попередження та інформаційні повідомлення з рівнем серйозності 10 або нижче, розрив з'єднання, викликаний клієнтом, завершення сеансу адміністратором за допомогою інструкції KILL.
Функції для отримання відомостей про помилки

Для отримання інформації про помилки, які спричинили виконання блоку CATCH, можна використовувати такі функції:

  • ERROR_NUMBER() – повертає номер помилки;
  • ERROR_MESSAGE() - повертає опис помилки;
  • ERROR_STATE() - повертає код стану помилки;
  • ERROR_SEVERITY() - повертає ступінь серйозності помилки;
  • ERROR_PROCEDURE() — повертає ім'я процедури, що зберігається, або тригера, в якому відбулася помилка;
  • ERROR_LINE() — повертає номер рядка інструкції, що спричинила помилку.

Якщо ці функції викликати поза блоком CATCH, вони повернуть NULL.

Приклад використання конструкції TRY…CATCH для обробки помилок

Для демонстрації того, як працює конструкція TRY ... CATCH, давайте напишемо просту SQL інструкцію, в якій ми навмисно припустимося помилки, наприклад, спробуємо виконати операцію поділ на нуль.

Початок блоку обробки помилок BEGIN TRY - Інструкції, в яких можуть виникнути помилки DECLARE @ TestVar1 INT = 10, @ TestVar2 INT = 0, @ Rez INT SET @ Rez = @ TestVar1 / @ TestVar2 END TRY - Початок блоку CATCH BEGIN CATCH - -Дії, які будуть виконуватися у разі виникнення помилки SELECT ERROR_NUMBER() AS [Номер помилки], ERROR_MESSAGE() AS [Опис помилки] SET @Rez = 0 END CATCH SELECT @Rez AS [Результат]

В даному випадку ми виводимо номер та опис помилки за допомогою функцій ERROR_NUMBER() та ERROR_MESSAGE(), а також присвоюємо змінній з підсумковим результатом значення 0, як бачимо, інструкції після блоку CATCH продовжують виконуватися.

У мене на цьому все, сподіваюся, матеріал був Вам корисний, поки що!

У цьому прикладі, ми маємо typo в коді (в try block ).

На прикладі є відповідь на вимогу "Welcome guest!", але напис is misspelled.

catch block catches error, and executes code to handle it:




try (
adddlert("Welcome guest!");
}
catch(err) (
document.getElementById("demo").innerHTML = err.message;
}

Більше "Try it Yourself" examples below.

Definition and Usage

Потрібно / catch / finally statement handles деякі або всі помилки, які можуть трапитися в блокі коду, при якому продовжується керування кодом.

Помилки можуть бути повідомлені про помилки, які можуть бути запрограмовані, помилки, що призводять до запуску, і інші непотрібні думки.

Прямий стан дає змогу виявити блок блоку коду, щоб бути tested для errors while it is being executed.

Переміщення статей дозволить вам визначити курс блоку, щоб бути виконаним, якщо помилка випадки в спробі блоку.

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

Увага: кишеньки і кінцеві статки є як опційні, але вам потрібно використовувати одну з них (якщо не потрібна) при використанні цих статей.

Tip: Якщо у вас є помилки, JavaScript необхідний як правило, так і генерується помилка повідомлення. Використовуйте throw statement to create a custom error (проникнення). Якщо ви використовуєте ходу разом з try and catch , ви можете контролювати програму flow і генерувати custom error messages.

Більше інформації про JavaScript errors, read out JavaScript Errors Tutorial.

Browser Support Statement
try/catch/finally Yes Yes Yes Yes Yes
Syntax

Try (
tryCode - Block of code to try
}
catch( err) {
catchCode - Block of code to handle errors
}
finally (
finalcode - блок коду, щоб виконати regardless of try / catch result
}

Parameter Values Parameter Description
tryCode Required. Блок code to be tested for errors while it is being executed
err Потрібно, якщо використовується. Специфікація локальної variable that refers to the error. Варіант може бути віднесений до Error object (записи інформації про виявлену нагаду, як повідомлення ""addlert" is not defined"). If the exception був створений з throw statement, the variable refers to the object specified in the throw statement (see "More Examples")
catchCode Optional. Блок блоку для виконання, якщо помилка випадки в try block. If no error error this block of code is never executed
finallyCode Optional. Блок code to be executed regardless of try / catch result
Technical Details JavaScript Version:
ECMAScript 3
More Examples Example

Це приклади екземелів введення. Якщо значення є хитромудрим, а висновок (err) is thrown.

За винятком (err) є відповідь на catch statement and custom error message is displayed:



Please input a number between 5 and 10:


Test Input


function myFunction() (
var message, x;
message = document.getElementById("message");
message.innerHTML = "";
x = document.getElementById("demo").value;
try (
if(x == "") throw "is Empty";
if(isNaN(x)) throw "not a number";
if(x > 10) throw "too high";
if(x< 5) throw "too low";
}
catch(err) (
message.innerHTML = "Input" + err;
}
}

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

Помилки бувають в основному 2-х типів - це синтаксичні та логічні. До синтаксичним можна віднести помилки в імені змінних, функцій, помилки в синтаксисі коду. У принципі, такі помилки легко відловити через консоль браузера.

А ось логічні помилки з ними все не так просто, тому що вони призводять до неправильного виконання коду програми. Тому для їх усунення знадобиться налагодження програми, щоб зрозуміти, що власне відбувається на кожному кроці скрипта. Ми з вами тут розглянемо переважно локалізацію синтаксичних помилок з допомогою конструкції try…catch.



Конструкція перехоплення помилок try…catch

Конструкція try..catch складається з 2-х блоків: try, а потім catch. Ось приклад запису у загальному вигляді

Try ( // код ... ) catch (err) ( // обробка помилки )

Працює ця конструкція таким чином:

  • Виконується код усередині блоку try, так званої пастки.
  • Якщо у ньому не трапляються помилки, то блок catch(err) ігнорується.
  • А ось, якщо в ньому виникне помилка, то виконання try буде перервано на помилці, і керування передається на початок блоку catch(err). При цьому змінна err (можна вибрати будь-яку іншу назву) буде містити об'єкт помилки з детальною інформацією про помилку, що відбулася.
  • Тому при помилці в try скрипт не зупиняється, і навіть навіть маємо можливість обробити помилку всередині блоку catch.

    Розглянемо це з прикладів.

    • Приклад без помилок: при запуску спрацюють alert (1) та (2): try (alert ("Блок try"); // (1)