Skip to content

Практическая работа №7

Обработка ошибок try/catch. Расширение стандартного класса Error

Section titled “Обработка ошибок try/catch. Расширение стандартного класса Error”

Цель работы

  • Закрепить принципы обработки ошибок в JavaScript через конструкции try/catch.
  • Научиться создавать пользовательские классы ошибок наследованием от Error.
  • Освоить генерацию, отлов и обработку ошибок в прикладных сценариях.

Основные теоретические положения

Section titled “Основные теоретические положения”

Обработка ошибок в JavaScript

Section titled “Обработка ошибок в JavaScript”

Ошибка — исключительная ситуация, которая возникает при выполнении программы. Например: попытка обращения к несуществующему свойству, деление на ноль, некорректные данные.

Обработка ошибок позволяет:

  • предотвратить аварийное завершение программы;
  • информировать пользователя о проблеме;
  • корректно завершать выполнение кода.
  1. try — содержит код, который потенциально может вызвать ошибку.
  2. catch — отрабатывает, если в блоке try возникла ошибка.
  3. finally — выполняется в любом случае завершения try, независимо от наличия ошибок.
try {
// Код, в котором может возникнуть ошибка
let result = dangerousOperation();
} catch (error) {
// Обработка ошибки
console.error("Произошла ошибка:", error.name, error.message);
} finally {
// Код, который выполнится всегда (например, закрытие соединения)
console.log("Блок finally завершен.");
}

Создание и расширение класса Error

Section titled “Создание и расширение класса Error”

Встроенный класс Error используется для создания собственных ошибок с помощью оператора throw.

throw new Error('Это стандартное исключение!');

Пользовательские ошибки описывают нестандартные ситуации через наследование. Это позволяет легко идентифицировать тип ошибки в блоке catch.

class ValidationError extends Error {
constructor(message) {
super(message);
this.name = "ValidationError"; // Установка имени для идентификации
}
}

Основные требования к практической работе

Section titled “Основные требования к практической работе”
  1. В каждом выполненном задании необходимо использовать блоки try/catch/finally.
  2. Для каждого варианта создать собственный класс ошибки, наследуя его от Error.
  3. Продемонстрировать работу кода с понятными выводами в консоль.

Задания для выполнения

Section titled “Задания для выполнения”

При выполнении практической работы необходимо выбрать значения из таблицы Типы ошибок по номеру варианта. Если ваш номер в списке превышает количество из таблицы, то варианты повторяются по кругу (например, 16-й берёт значения варианта 1 и т.д).

Исходные данные (10 вариантов)

Section titled “Исходные данные (10 вариантов)”
ВариантКласс ошибкиСценарий
1ValidationErrorВвод некорректного email (отсутствует ’@’ или ’.‘)
2RangeErrorCustomЧисло вне заданного диапазона (например, возраст < 0 или > 120)
3AuthenticationErrorПароль не соответствует условию длины (менее 8 символов)
4NetworkErrorСимуляция сетевого сбоя (например, функция возвращает false с вероятностью 30%)
5DatabaseErrorНет записи с указанным id (например, id < 1)
6PermissionDeniedErrorНедостаточно прав пользователя (например, роль не ‘admin’)
7TimeoutErrorПревышено время операции (имитация таймаута, если операция длится > 100мс)
8FileSizeErrorРазмер файла превышает лимит (например, > 5MB)
9InvalidFormatErrorНекорректный формат данных (например, ожидается JSON, получена строка)
10ResourceNotFoundErrorПопытка доступа к несуществующему ресурсу (например, файл не найден)

Задание 1. Создание и генерация пользовательской ошибки

Section titled “Задание 1. Создание и генерация пользовательской ошибки”
  1. Для своего варианта реализуйте класс ошибки (наследник от Error).
  2. Опишите функцию, которая принимает входные данные и генерирует созданную вами ошибку, если данные не соответствуют Сценарию из таблицы.
  3. Вызовите эту функцию внутри блока try/catch/finally.
  4. В блоке catch обработайте ошибку (выведите имя и сообщение ошибки в консоль).
  5. В блоке finally выведите сообщение о завершении операции.

Задание 2. Обработка нескольких типов ошибок

Section titled “Задание 2. Обработка нескольких типов ошибок”

Напишите функцию processData(value), которая:

  1. Генерирует ошибку RangeErrorCustom (Вариант 2), если value не является числом.
  2. Генерирует ошибку ValidationError (Вариант 1), если value является отрицательным числом.
  3. В противном случае возвращает value * 2.

Вызовите processData() три раза с разными входными данными (корректными, вызывающими RangeErrorCustom, вызывающими ValidationError) и обработайте их в одном блоке try/catch, используя поле error.name для различения типов ошибок.

Задание 3. Использование finally для очистки

Section titled “Задание 3. Использование finally для очистки”

Напишите функцию connectAndProcess(data), которая симулирует работу с внешним ресурсом:

  1. В блоке try выведите сообщение “Установка соединения…” и сгенерируйте NetworkError (Вариант 4), если data равно null.
  2. В блоке catch выведите сообщение об ошибке.
  3. В блоке finally выведите сообщение “Соединение закрыто.”

Проверьте работу функции, вызывая ее как с данными, вызывающими ошибку, так и с корректными данными.


  1. Зачем создавать собственные классы ошибок вместо использования стандартных?
  2. Как работает блок finally — когда он выполняется?
  3. Для чего полезно различать типы ошибок по полю error.name?
  4. В каких случаях удобно использовать вложенные try/catch?
  5. Какие преимущества даёт добавление дополнительных полей в классе ошибки (например, statusCode или details)?
  6. Объясните разницу между throw new Error(...) и просто throw 'строка'.

Рекомендуемая литература

Section titled “Рекомендуемая литература”
  1. try…catch — MDN — главная документация по синтаксису, структуре, особенностям и примерам работы блока try/catch/finally. Описывает, как ловить стандартные и пользовательские ошибки, а также вложенность блоков try/catch.
  2. Поток управления и обработка ошибок — MDN — подробный гид по управлению потоком исполнения, обработке стандартных и пользовательских ошибок. Рассматривает делегирование ошибок и различие видов ошибок.
  3. Error — MDN — описание стандартного класса Error и рекомендаций по расширению (созданию своих типов ошибок). Приведены основные встроенные ошибки и их расширение через наследование (англ.).
  4. Error handling, “try…catch” — JavaScript.info — разбор try/catch с практическими примерами, объяснением throw, finally и генерации пользовательских ошибок.