JavaRush /Курсы /Модуль 1: Web Core /Обработка исключений

Обработка исключений

Модуль 1: Web Core
18 уровень , 9 лекция
Открыта

10.1 Блок try...catch

Обработка исключений — важный аспект программирования, который помогает улучшить устойчивость и надежность кода. В JavaScript для обработки исключений используются ключевые слова try, catch, finally и throw. В лекции мы рассмотрим эти ключевые слова, их синтаксис и примеры использования.

Блок try...catch

Конструкция try...catch используется для обработки ошибок, возникающих в блоке кода try. Если в блоке try возникает ошибка, управление передается в блок catch, где ошибка может быть обработана.

Синтаксис:

    
      try {
        // Код, который может вызвать исключение
      } catch (error) {
        // Код для обработки исключения
      }
    
  

В этом примере, хотя деление на ноль не вызывает ошибку в JavaScript, если бы это была другая ошибка (например доступ к неопределенной переменной), блок catch обработал бы ее:

JavaScript
    
      try {
        let result = 10 / 0;

        console.log(result);

      } catch (error) {
        console.error('An error occurred:', error);
      }
    
  

10.2 Блок finally

Блок finally используется для выполнения кода, который должен быть выполнен независимо от того, возникло исключение в блоке try или нет. Блок finally следует за блоком catch.

Синтаксис:

    
      try {
        // Код, который может вызвать исключение
      } catch (error) {
        // Код для обработки исключения
      } finally {
        // Код, который выполнится в любом случае
      }
    
  

В этом примере сообщение This will always execute. будет выведено независимо от того, возникла ошибка или нет:

JavaScript
    
      try {
        let result = 10 / 0;
        console.log(result);
      } catch (error) {
        console.error('An error occurred:', error);
      } finally {
        console.log('This will always execute.');
      }
    
  

10.3 Оператор throw

Оператор throw используется для явного выбрасывания исключений. С его помощью можно выбрасывать пользовательские ошибки.

Синтаксис:

    
      throw expression;
    
  

Где:

  • expression: любое выражение или объект, который будет выброшен как исключение

Пример использования

В этом примере выбрасывается ошибка, если попытаться разделить на ноль, и блок catch обрабатывает эту ошибку:

JavaScript
    
      function divide(a, b) {
        if (b === 0) {
          throw new Error('Division by zero is not allowed.');
        }
        return a / b;
      }

      try {
        let result = divide(10, 0);
        console.log(result);
      } catch (error) {
        console.error('An error occurred:', error.message);
      }
    
  

10.4 Расширенные примеры и использование

Пример 1: Множественные исключения

Иногда в блоке try могут возникать разные типы ошибок. Вы можете обрабатывать их по-разному, используя свойства объекта ошибки.

В этом примере мы обрабатываем синтаксическую ошибку JSON отдельно от других возможных ошибок:

JavaScript
    
      try {
        JSON.parse('{ malformed JSON string }');
      } catch (error) {
        if (error instanceof SyntaxError) {
          console.error('JSON Syntax Error:', error.message);
        } else {
          console.error('Unexpected Error:', error);
        }
      } finally {
        console.log('Parsing attempt finished.');
      }
    
  

Пример 2: Вложенные блоки try...catch

Можно использовать вложенные блоки try...catch для более тонкой обработки ошибок.

В этом примере ошибка, возникающая в первом блоке try, обрабатывается внутренним блоком catch, который затем повторно выбрасывает ошибку для обработки внешним блоком catch:

JavaScript
    
      try {
        try {
          let result = divide(10, 0);
          console.log(result);
        } catch (innerError) {
          console.error('Inner catch:', innerError.message);
          throw innerError;
        }
      } catch (outerError) {
        console.error('Outer catch:', outerError.message);
      } finally {
        console.log('Nested try...catch finished.');
      }

      function divide(a, b) {
        if (b === 0) {
          throw new Error('Division by zero is not allowed.');
        }
        return a / b;
      }
    
  

Пример 3: Использование finally для освобождения ресурсов

Блок finally полезен для освобождения ресурсов, таких как закрытие файлов или завершение сетевых соединений.

В этом примере файл всегда будет закрыт, независимо от того, возникла ошибка при его чтении или нет:

JavaScript
    
      function readFile(filePath) {
        let file;
        try {
          file = openFile(filePath); // Функция, открывающая файл
          // Работа с файлом
        } catch (error) {
          console.error('Error reading file:', error.message);
        } finally {
          if (file) {
            closeFile(file); // Функция, закрывающая файл
          }
          console.log('File processing finished.');
        }
      }

      function openFile(path) {
        // Логика открытия файла
      }

      function closeFile(file) {
        // Логика закрытия файла
      }

      readFile('path/to/file.txt');
    
  

Обработка исключений в JavaScript с использованием try, catch, finally и throw позволяет создавать более надежные и устойчивые приложения. Понимание и правильное использование этих конструкций помогает эффективно управлять ошибками, освобождать ресурсы и улучшать пользовательский опыт.

1
Задача
Модуль 1: Web Core, 18 уровень, 9 лекция
Недоступна
Обработка ошибки
Обработка ошибки
1
Задача
Модуль 1: Web Core, 18 уровень, 9 лекция
Недоступна
Блок finally
Блок finally
1
Опрос
Объекты, 18 уровень, 9 лекция
Недоступен
Объекты
Объекты
Комментарии (2)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Анастасия Уровень 27
13 августа 2025
Интересно, почему в примерах, когда мы должны выводить:

 console.error('An error occurred:', error);
Выводится: Infinity Думала, что там должно фигурировать "An error occurred:", раз мы там это прописываем.... Жаль не объясняется =((( + жаль не проходили до этого работу с файлами, сложно воспринимать последний пример из-за этого
Daria Snegireva Уровень 20
24 июля 2025
было бы здорово, если бы строки кода в примерах сопровождались комментариями