Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Новости Школы Программирования - Защитное программирование. 10 способов обработки ошибок


В прошлый раз мы говорили об обработке ошибок, которые не должны возникать в программе. Сегодня же рассмотрим способы обработки прогнозируемых ошибок. Итак, предлагаю 10 вариантов реакции на ошибку в ходе выполнения программы:
  1. Возвращение нейтрального значение. Часто оптимальным способом просигнализировать об ошибке внутри функции служит возвращение нейтрального значения - нуля, null, пустой строки и т.п.
  2. Замена на следующий подходящий блок данных. Такое может случиться, например, при работе с базой данных или чтении из файла. Допустим мы прочитали блок данных, который оказался некорректным. Возможно, что по логике программы наилучшей реакцией на такую ситуацию будет прочтение следующего блока данных.
  3. Возвращение предыдущего результата. Допустим у нас есть модуль программы, который снимает показания с датчика давления. В какой-то момент по техническим причинам датчик не вернул данные о давлении. Возможно, наилучшим выходом будет возвращение предыдущего значения.
  4. Выбор ближайшего допустимого значения. Может сложиться так, что мы ждем от функции значения в заданном диапазоне. Но в ходе вычислений результат вышел за допустимый интервал. В этом случае может быть целесообразным вернуть одно из крайних допустимых значений функции.
  5. Запись логов в файл. Этот вариант можно совмещать с другими. Например, при выходе результата за допустимый диапазон можно возвращать корректное значение, а в файл записывать настоящий результат вычислений.
  6. Возвращение кода ошибки. Можно выработать общие правила обработки ошибок в системе. Тогда обработка ошибок будет вне компетенции отдельных функций, чья задача будет заключаться лишь в возвращении кода ошибки, который должен будет обрабатываться специально разработанным для таких случаев модулем.
  7. Вызов обработчика ошибок. Можно и не дожидаться, когда возвращенный код ошибки попадет в модуль, который его сможет корректно обработать. Альтернативой этому служит вариант с глобальным обработчиком ошибок, который вызывается непосредственно из функции в случае ошибки. Минусом является то, что ухудшается переносимость отдельных частей программы из-за зависимости от модуля обработчика.
  8. Вывод сообщения об ошибке вне зависимости от места её появления. Этот подход минимизирует накладные расходы но обладает очевидными минусами. В первую очередь тем, что функции пользовательского интерфейса расползаются по всему коду программы. Это создаст значительные проблемы при желании отделить интерфейс пользователя от бизнес-логики.
  9. Обработка ошибки в месте её возникновения. В этом подходе вся ответственность за обработку ошибки возлагается на программиста, реализующего конкретный модуль системы. Минусом является отсутствие централизованного подхода к решению проблем в программе. Таким образом, любой модуль из-за некорректной обработки ошибки потенциально может привести в сбою всей программы.
  10. Прекращение выполнения. В некоторых критических ситуациях целесообразно без промедления завершить работу программы. Хотя с этим могут не согласиться пострадавшие от синего экрана смерти Windows:)

В избранное