Практическая работа №7
Обработка ошибок try/catch. Расширение стандартного класса Error
Section titled “Обработка ошибок try/catch. Расширение стандартного класса Error”Цель работы
- Закрепить принципы обработки ошибок в JavaScript через конструкции
try/catch. - Научиться создавать пользовательские классы ошибок наследованием от
Error. - Освоить генерацию, отлов и обработку ошибок в прикладных сценариях.
Основные теоретические положения
Section titled “Основные теоретические положения”Обработка ошибок в JavaScript
Section titled “Обработка ошибок в JavaScript”Ошибка — исключительная ситуация, которая возникает при выполнении программы. Например: попытка обращения к несуществующему свойству, деление на ноль, некорректные данные.
Обработка ошибок позволяет:
- предотвратить аварийное завершение программы;
- информировать пользователя о проблеме;
- корректно завершать выполнение кода.
Конструкция try/catch/finally
Section titled “Конструкция try/catch/finally”try— содержит код, который потенциально может вызвать ошибку.catch— отрабатывает, если в блокеtryвозникла ошибка.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 “Основные требования к практической работе”- В каждом выполненном задании необходимо использовать блоки
try/catch/finally. - Для каждого варианта создать собственный класс ошибки, наследуя его от
Error. - Продемонстрировать работу кода с понятными выводами в консоль.
Задания для выполнения
Section titled “Задания для выполнения”При выполнении практической работы необходимо выбрать значения из таблицы Типы ошибок по номеру варианта. Если ваш номер в списке превышает количество из таблицы, то варианты повторяются по кругу (например, 16-й берёт значения варианта 1 и т.д).
Исходные данные (10 вариантов)
Section titled “Исходные данные (10 вариантов)”| Вариант | Класс ошибки | Сценарий |
|---|---|---|
| 1 | ValidationError | Ввод некорректного email (отсутствует ’@’ или ’.‘) |
| 2 | RangeErrorCustom | Число вне заданного диапазона (например, возраст < 0 или > 120) |
| 3 | AuthenticationError | Пароль не соответствует условию длины (менее 8 символов) |
| 4 | NetworkError | Симуляция сетевого сбоя (например, функция возвращает false с вероятностью 30%) |
| 5 | DatabaseError | Нет записи с указанным id (например, id < 1) |
| 6 | PermissionDeniedError | Недостаточно прав пользователя (например, роль не ‘admin’) |
| 7 | TimeoutError | Превышено время операции (имитация таймаута, если операция длится > 100мс) |
| 8 | FileSizeError | Размер файла превышает лимит (например, > 5MB) |
| 9 | InvalidFormatError | Некорректный формат данных (например, ожидается JSON, получена строка) |
| 10 | ResourceNotFoundError | Попытка доступа к несуществующему ресурсу (например, файл не найден) |
Задание 1. Создание и генерация пользовательской ошибки
Section titled “Задание 1. Создание и генерация пользовательской ошибки”- Для своего варианта реализуйте класс ошибки (наследник от
Error). - Опишите функцию, которая принимает входные данные и генерирует созданную вами ошибку, если данные не соответствуют Сценарию из таблицы.
- Вызовите эту функцию внутри блока
try/catch/finally. - В блоке
catchобработайте ошибку (выведите имя и сообщение ошибки в консоль). - В блоке
finallyвыведите сообщение о завершении операции.
Задание 2. Обработка нескольких типов ошибок
Section titled “Задание 2. Обработка нескольких типов ошибок”Напишите функцию processData(value), которая:
- Генерирует ошибку
RangeErrorCustom(Вариант 2), еслиvalueне является числом. - Генерирует ошибку
ValidationError(Вариант 1), еслиvalueявляется отрицательным числом. - В противном случае возвращает
value * 2.
Вызовите processData() три раза с разными входными данными (корректными, вызывающими RangeErrorCustom, вызывающими ValidationError) и обработайте их в одном блоке try/catch, используя поле error.name для различения типов ошибок.
Задание 3. Использование finally для очистки
Section titled “Задание 3. Использование finally для очистки”Напишите функцию connectAndProcess(data), которая симулирует работу с внешним ресурсом:
- В блоке
tryвыведите сообщение “Установка соединения…” и сгенерируйтеNetworkError(Вариант 4), еслиdataравноnull. - В блоке
catchвыведите сообщение об ошибке. - В блоке
finallyвыведите сообщение “Соединение закрыто.”
Проверьте работу функции, вызывая ее как с данными, вызывающими ошибку, так и с корректными данными.
Контрольные вопросы
Section titled “Контрольные вопросы”- Зачем создавать собственные классы ошибок вместо использования стандартных?
- Как работает блок
finally— когда он выполняется? - Для чего полезно различать типы ошибок по полю
error.name? - В каких случаях удобно использовать вложенные
try/catch? - Какие преимущества даёт добавление дополнительных полей в классе ошибки (например,
statusCodeилиdetails)? - Объясните разницу между
throw new Error(...)и простоthrow 'строка'.
Рекомендуемая литература
Section titled “Рекомендуемая литература”- try…catch — MDN — главная документация по синтаксису, структуре, особенностям и примерам работы блока try/catch/finally. Описывает, как ловить стандартные и пользовательские ошибки, а также вложенность блоков try/catch.
- Поток управления и обработка ошибок — MDN — подробный гид по управлению потоком исполнения, обработке стандартных и пользовательских ошибок. Рассматривает делегирование ошибок и различие видов ошибок.
- Error — MDN — описание стандартного класса Error и рекомендаций по расширению (созданию своих типов ошибок). Приведены основные встроенные ошибки и их расширение через наследование (англ.).
- Error handling, “try…catch” — JavaScript.info — разбор try/catch с практическими примерами, объяснением throw, finally и генерации пользовательских ошибок.