Прикладной код

Конструкция «try — catch»

Конструкция «try — catch»

Конструкция «try — catch» помечает блок инструкций как «try». В зависимости от того, произошла ошибка или нет, вызывает дополнительный блок инструкций «catch».

Синтаксис

try {
  // Исполняемый код
}
catch (e) {
  // При возникновении ошибки, делаем что-то
}

Параметры

  • «try» — блок, в котором располагается код. Указанный код может содержать ошибку, которая возникает во время выполнения программы.
  • «catch» — блок, который позволяет принять решение, что делать при возникновении ошибки.

Описание

Блок «catch» содержит инструкции, которые будут выполнены, если в блоке «try» произошла ошибка. Это сделано для того, чтобы была возможность обработать ошибку в блоке «catch», при ее возникновении. Если какая-либо инструкция вызывает ошибку в «try» блоке, то управление переходит в блок «catch». Если в «try» блоке ошибки нет, то блок «catch» пропустится.

Блок «finally»

К инструкции «try — catch» можно добавить еще один блок – «finally», который будет выполняться всегда. Он выполняется и при возникновении исключения, после блока «catch», и без исключения, после того, как блок «try» завершит выполнение:

try {
  alert("Код в блоке try");  // Код без ошибок
} catch(e) {
  alert("Блок catch игнорируется");
} finally {
  alert("Код в блоке finally");
}
 
try {
  alert(x);  // Ошибка
} catch(e) {
  alert("Код в блоке catch");
} finally {
  alert("Код в блоке finally");
}

Если исключение никак не планируется обрабатывать то, при наличии блока «finally» блок «catch» можно пропустить:

try {
  alert(x);
} finally {
  alert("Код в блоке finally");
}

Блоки «try», «catch» и «finally» начинаются и заканчиваются фигурными скобками. Это обязательная часть их синтаксиса, и она не может быть опущена, даже если внутри блока содержится только одна инструкция.

Примеры

Пример конструкции «try — catch».

// В примере вызываются методы factorial(), promt() и alert().
// Последние два метода нужны для организации ввода и вывода пользователю
try {
        // Запросить число у пользователя
        var n = Number(prompt("Введите положительное число", "")); 
        
        // Вычислить факториал числа, предполагая, 
        // что входные данные корректны 
        var f = factorial(n); 
        
        // Вывести результат 
        alert(n + "! = " + f);
}
catch (ex) { 
        // Если данные некорректны, управление будет передано сюда 
        alert(ex); // Сообщить пользователю об ошибке
}

Пример конструкции с использованием блока «finally».

// Пример подсчета времени на выполнение функции sum(n). 
// Функция должна возвратить сумму чисел от 1 до n и работает рекурсивно.
function sum(n) {
 return n ? (n + sum(n - 1)) : 0;
}

var n = +prompt('Введите n?', 100);

var start = new Date();

try {
 var result = sum(n);
} catch (e) {
 result = 0;
} finally {
 var diff = new Date() - start;
}

alert(result ? result : 'была ошибка');
alert("Выполнение заняло " + diff);