74. Уведомляйте об ошибках, обрабатывайте и преобразовывайте их там, где следует

74. Уведомляйте об ошибках, обрабатывайте и преобразовывайте их там, где следует

Резюме

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

Обсуждение

Сообщайте об ошибке (т.е. пишите throw) там, где функция обнаруживает ошибку, которую не может разрешить самостоятельно и которая делает невозможным продолжение выполнения функции (см. рекомендацию 70).

Обрабатывайте ошибку (т.е. пишите catch, который не генерирует повторно то же или иное исключение и не использует иной способ для дальнейшего уведомления об ошибке, например, код ошибки) там, где вы обладаете достаточной информацией, чтобы ее обработать, в том числе для обеспечения границ, определенных стратегией обработки ошибок (например, границ функции main или потоков; см. рекомендацию 62) и для поглощения исключений в телах деструкторов и функций освобождения ресурсов.

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

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

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

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

Исключения

Иногда оказывается полезным перехватить и повторно генерировать ту же ошибку (т.е. воспользоваться catch с последующим throw) для контроля за ошибками, несмотря на то, что в действительности обработки ошибки при этом не происходит.

Ссылки

[Stroustrup00] §3.7.2, §14.7, §14.9 • [Sutter00] §8 • [Sutter04] §11 • [Sutter04b]

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Отчеты об ошибках

Из книги Тонкости реестра Windows Vista. Трюки и эффекты автора Клименко Роман Александрович

Отчеты об ошибках В операционной системе Windows Vista реализован новый механизм отчетов об ошибках. Теперь ограничить и настроить его работу можно с помощью следующих параметров, расположенных в ветви реестра HKEY_CURRENT_USERSoftwarePoliciesMicrosoftWindowsWindows Error Reporting. Если не сказано иное,


Текстовые сообщения об ошибках

Из книги Очень хороший самоучитель пользователя компьютером. Как самому устранить 90% неисправностей в компьютере и увеличить его возможности автора Колисниченко Денис Николаевич

Текстовые сообщения об ошибках У каждого компьютера есть базовая система ввода/ вывода (BIOS, Basic Input/Output System). Одной из функций BIOS является функция самодиагностики при включении компьютера – POST (Power On Self Test).POST – это программа самотестирования компьютера. Запускается сразу


Отчет об ошибках

Из книги Установка и настройка Windows XP. Легкий старт автора Донцов Дмитрий

Отчет об ошибках На вкладке Дополнительно в окне Свойства системы нажимаем кнопку Отчет об ошибках. Откроется одноименное окно Отчет об ошибках (рис. 4.5), в котором устанавливаем переключатель в положение Отключить отчет об ошибках и оставляем установленным флажок Но


7.2 Сообщения об ошибках ICMP

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

7.2 Сообщения об ошибках ICMP Бывают ситуации, приводящие к отбрасыванию (удалению из сети) датаграммы IP. Например, точка назначения может стать недоступной из-за обрыва связи. Или может завершиться время жизни датаграммы. Маршрутизатор не сможет переслать длинную


7.2.1 Типы сообщений об ошибках

Из книги Scrum и XP: заметки с передовой автора Книберг Хенрик

7.2.1 Типы сообщений об ошибках На рис. 7.3 показаны обобщенные сообщения, формируемые маршрутизатором и хостом назначения для отчета о возникшей проблеме. В таблице 7.1 перечислены формальные имена сообщений об ошибках ICMP. Рис. 7.3. Типы сообщений об ошибках ICMPТаблица 7.1


Как учиться на чужих ошибках

Из книги Стандарты программирования на С++. 101 правило и рекомендация автора Александреску Андрей

Как учиться на чужих ошибках Информация, которая всплывает в ходе ретроспектив, обычно крайне важна. Для команды настали нелёгкие времена, потому что менеджеры по продажам начали забирать программистов с работы на свои встречи, чтоб те играли роль «технических


72. Для уведомления об ошибках следует использовать исключения

Из книги Удвоение продаж в интернет-магазине автора Парабеллум Андрей Алексеевич

72. Для уведомления об ошибках следует использовать исключения РезюмеДля уведомления об ошибках лучше использовать механизм исключений, а не коды ошибок. Применять коды состояния (например, коды ошибок, переменную errno) следует только тогда, когда нельзя использовать


Используйте однозначные сообщения об ошибках

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

Используйте однозначные сообщения об ошибках Более половины ваших посетителей не понимают, что написано в сообщениях об ошибках, которые пишут программисты. В итоге пользователи, у которых не получается отправить форму с первого раза, покидают ваш интернет-магазин.Еще


Сообщения об ошибках gsec

Из книги Искусство программирования на языке сценариев командной оболочки автора Купер Мендель

Сообщения об ошибках gsec В табл. 34.2 представлены сообщения об ошибках gsec.Таблица 34.2. Сообщения об ошибках gsec Сообщение Причины и рекомендуемые действия Add record error (Ошибка добавления записи) Неверный синтаксис или вы пытаетесь добавить пользователя, который уже


Сообщение об ошибках gbak

Из книги Linux программирование в примерах автора Роббинс Арнольд

Сообщение об ошибках gbak В табл. 38.3 описаны сообщения об ошибках, которые могут возникнуть в процессе копирования и восстановления, вместе с некоторыми советами, как поступать с этими ошибками.Таблица 38.3. Сообщения об ошибках gbak при копировании и восстановлении Сообщение


Сообщения об ошибках gfix

Из книги Linux и UNIX: программирование в shell. Руководство разработчика. автора Тейнсли Дэвид

Сообщения об ошибках gfix В табл. 39.2 представлены исключения, которые могут появиться в командах gfix вместе с советами, как скорректировать ваши команды.Таблица 39.2. Сообщения об ошибках gfix Сообщение об ошибке Причины и рекомендуемые действия Database file name <string> already given (Имя


Пример 9-13. Подстановка параметров и сообщения об ошибках

Из книги Разработка ядра Linux автора Лав Роберт

Пример 9-13. Подстановка параметров и сообщения об ошибках #!/bin/bash# Проверка отдельных переменных окружения.# Если переменная, к примеру $USER, не установлена,#+ то выводится сообщение об ошибке.: ${HOSTNAME?} ${USER?} ${HOME?} ${MAIL?} echo echo "Имя машины: $HOSTNAME." echo "Ваше имя: $USER." echo "Ваш домашний


4.3.2. Стиль сообщения об ошибках

Из книги UNIX — универсальная среда программирования автора Пайк Роб

4.3.2. Стиль сообщения об ошибках Для использования в сообщениях об ошибках С предоставляет несколько специальных макросов. Наиболее широкоупотребительными являются __FILE__ и __LINE__, которые разворачиваются в имя исходного файла и номер текущей строки в этом файле. В С они


8.4.2. Подавление вывода сообщений об ошибках

Из книги автора

8.4.2. Подавление вывода сообщений об ошибках Допустим, вы хотите найти запись пользователя louise в системном файле паролей:$ grep louise /etc/passwdlouise:lxAL6GW9G.ZyY:501:501:Accounts Sect1С:/home/accts/louise:/bin/shHe исключена возможность, что вы забудете, как называется этот файл. В таком случае воспользуйтесь


Отправка сообщений об ошибках

Из книги автора

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