Когда нужны исключения

Безусловно, существуют определенные участки кода, где обработка ошибок жизненно необходима, это касается, например, работы с файловой системой, выполнения сетевых запросов или обращения к внешним источникам данных. Тем не менее, нецелесообразно заставлять программу обрабатывать исключения для каждой отдельной команды.

Что такое исключения в программировании

Здесь мы поговорим о типах ошибок, которые можно предвидеть заранее, и о том, как с ними справляться.

Большинство из наших программ разработаны так, что если в процессе их работы возникает какая-либо ошибка, программа неожиданно завершает свою работу. При этом иногда отображается сообщение об ошибке. На первый взгляд, это может показаться нормальной ситуацией, однако на деле большинство ошибок можно предугадать и научить программу правильно на них реагировать. Для этого и служат обработчики ошибок.

Что такое обработчик ошибок

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

  1. Заранее определяем возможные места и причины возникновения ошибки.
  2. На этих участках кода прописываем специальные конструкции, которые сообщают компьютеру, что ошибка была предусмотрена и у нас есть решение, позволяющее продолжить работу программы.
  3. Компьютер применяет подготовленное решение и переходит к следующему процессу выполнения.
  4. Таким образом, программа не аварийно завершает свою работу, а продолжает функционировать.

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

Значение слова «исключение»

1. Процесс действия по значению глагола: исключать (1), исключить, исключаться (1), исключиться.
2. Отклонение от установленных правил или норм.
3. В переносном смысле, разговорное — тот, кто чем-то отличается от окружающих.
Словарь Ефремовой Т.Ф.

1. Исключения (средний род, книжный язык). 1. Действие согласно глаголам исключить или исключать. Например, «исключение из списков». 2. Уклонение от норм, отступление от общепринятых правил. «Ни для кого не может быть исключений». «Нет правила без исключения». Примеры использования: «В виде исключения», «За исключением кого-чего» (книжные конструкции) — кроме, помимо, без кого-чего-н.
Словарь Ушакова Д.Н.

5 синонимов к слову «исключение»

  1. абстракция
  2. антипод
  3. белая ворона
  4. выкидывание
  5. выветь

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

Уход в лес, Эрнст Юнгер, 1951 г.

Комсомольское собрание, исключение из комсомола, исключение из института, военная служба и так далее.

Иуда, Валерий Сауткин, 2013 г.

Итак, все стало на свои места: Соня теперь является исключением из правила, но исключением, несомненно, высокого качества.

Так могло быть, Татьяна Володина, 2019 г.

В период Советского Союза исключение из партии нередко означало исключение из самой жизни.

Мои литературные святцы, Геннадий Красухин.

Исключение без исключений — это противоречие по определению.

Смерть Иисуса, Джон Максвелл Кутзее, 2020 г.

Толковый словарь в Telegram

Для быстрого поиска значений слов вы можете воспользоваться Telegram-ботом: @dict_rus_bot

Кто решает, какие ситуации программа исключает, а какие нет?

Все исключения должны определяться исключительно заданием или логическим анализом, а не чем-либо иным. Исключение не определяется никаким типом данных или их источником, хотя вы можете часто увидеть в интеллектуальных статьях фразы вроде: «Неверный ввод данных клиентом не может быть исключением». Не позволяйте этому вас сбивать с толку! Просто не стоит в это верить.

В вашем задании может быть приведено разумное исключение, касающееся неправильного ввода клиентами: «С нашей системой будут работать специально обученные сотрудники, поэтому ввод неверной информации исключен» или «Менеджер будет загружать в систему только письма, которые уже прошли проверку на соответствие формату, потому формат всегда будет корректен». В таких случаях заказчик сам указывает, где стоит ожидать исключение в создаваемой для него программе, и это совершенно нормально, что это касается ввода данных клиентом. Конечно, если программа предназначена для использования в определённой среде, а не как компонент библиотеки, её не следует просто обрывать. Обработчик исключений должен быть на верхнем уровне, чтобы преобразовать все неучтённые исключения в корректные ошибки, сохранять данные и аккуратно завершать работу программы (либо передавать управление основному модулю, если ошибка не была связана с ним).

Но, как и всегда, не забывайте уделять внимание деталям и задавать уточняющие вопросы по заданию. Если вам поручают сохранить файл, уточните, может ли возникнуть ситуация, при которой файл не будет сохранён. А если вы решили не уточнять, тогда не исключайте возможность возникновения такого казуса, а предложите механизм реакции на это событие. Ваш код не должен ничего оставлять на случай удачи.

Либо предусмотрите, либо исключите.

Почему любое избыточное исключение вредит коду?

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

Изображение

  • Не стоит же передавать флаг завершения через всю цепочку вызовов.
  • Мне нужно передать данные, которые были собраны до получения отрицательного ответа.
  • Функция может вернуть отрицательный результат по нескольким причинам, так проще озвучить эту причину.
  • Множество других аргументов.

Итак, почему же это не является оправданным подходом? Причина, как ни странно, заключается в том, что:

  • Вы не будете уверены в том, что сможете безопасно использовать уже написанные методы в других частях программы, так как они могут вызывать неожиданные исключения;

Как происходит работа с исключениями

  • Разработчик создает код и понимает, что в какой-то момент могут возникнуть нетипичные ситуации. Иногда разработчики добавляют механизм обработки исключений в уже существующий код, например, когда такие ситуации становятся заметными при тестировании.
  • В этом месте вставляется специальный блок кода — обработчик. Он подсказывает программе: «Здесь может возникнуть особая ситуация. Если это все же произойдет, выполни такой-то код».
  • Внутри обработчика находится функция, которая выполнится, если программа столкнется с описанной ситуацией. Она либо предотвращает проблему, либо корректирует дальнейшие действия программы.

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

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

Существует несколько видов обработки: структурная и неструктурная, с возвратом результата и без него. Они различаются по механизму реализации, однако основная суть остается неизменной: это функция, которая срабатывает в случае возникновения определенной исключительной ситуации в коде. В частности, здесь можно использовать условный оператор if или специализированные синтаксические конструкции.

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

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

Пример: необходимо было запустить скрипт, необходимый для работы следующего скрипта, но он не запустился. Следующий скрипт обнаружил это, зафиксировал исключение и вызвал обработчик, который вручную запустил нужный скрипт. После этого все продолжает работать, как запланировано.

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

Структурная и неструктурная обработка. Это два подхода к добавлению обработчиков. В первом случае обработчики интегрируются в код, а когда генерируется исключение, для каждого случая выбирается соответствующий обработчик. Во втором подходе обработчики существуют отдельно и соединяются с определенными типами исключений с помощью специальных команд. Выбор подхода зависит от вида исключения, особенностей кода и используемого языка программирования.

Обtypically асинхронные исключения обрабатываются неструктурно, тогда как синхронные — структурно.

Гарантированное завершение. Это особый вид функции, который обычно пишется после обработчика. Она описывает действия, которые должны быть выполнены, независимо от того, произошло исключение или нет.

Правописание частицы «не»

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

  • ненавидеть,
  • невзлюбить,
  • нездоровится,
  • недоумевать,
  • недооценивать,
  • недобрать.

Полезное видео: Правописание частицы «не» с разными частями речи

Заключение

Если вы хотите разобраться, как те или иные слова оказались исключениями из правил, вам поможет изучение этимологии. Большинство правил русского языка легче запомнить, зная условия для слов-исключений. Примеры таких правил включают написание частицы «не» с глаголами, правила написания «ы» и «и» после «ц», использование мягкого знака в середине слов, а также чередование гласных и согласных звуков в корнях «раст- (-ращ-)», «-рос-«, «скак-«, «-скоч-«.

Оцените статью
Хозяюшки