Многие неправильно понимают, что такое ошибки. Я хотел бы отметить некоторые из моих мнений здесь.

  • Нет другого хорошего способа справиться с «непредвиденными ситуациями», кроме остановки программы (сбой/паника).
  • Ошибки — это не «неожиданная ситуация». Ошибки — это «значение результата» расчета, которое представляет собой «плохие случаи».
  • Ошибки должны содержать правильную информацию, чтобы вызывающая сторона могла правильно с ними справиться.
  • Ошибки более низкого уровня не должны отображаться на более высоком уровне как есть. Ошибки более низкого уровня не работают на более высоком уровне.
  • Разные ошибки требуют разной структуры.

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

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

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

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