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