Песочница

Детерминированная обработка ошибок

Используйте `with-exception-handler` для процедурной обработки и `guard` для условного сопоставления перехватываемых error objects.

Проверьте запуском

LISPEX
(guard (e ((error-object? e) (error-object-message e))) (error "bad input"))

Наблюдаемый результат

OUTPUT
"bad input"

Разберите приём

  1. Создайте гостевую ошибку. (error "bad input") строит перехватываемый объект со стабильным сообщением.
  2. Сопоставьте структуру. guard проверяет error-object?, а не разбирает напечатанный текст.
  3. Верните значение восстановления. Выбранная ветвь извлекает сообщение, и вся форма даёт "bad input".

Как рассуждать

  • raise-continuable возвращает результат handler в место raise; non-continuable raise не может вернуться нормально.
  • Используйте документированные predicates/accessors error object, а не разбор отображённого текста диагностики.
  • Если ни одна ветвь guard не совпала, исходная ошибка поднимается заново без изменения.

Проверьте себя

Что произойдёт, если ни одна ветвь guard не совпадёт с объектом ошибки?

Ответ

Исходная ошибка будет поднята снова без изменений. Отсутствие совпадения не превращается в общее успешное значение.

Частая ошибка

ResourceLimit не перехватывается, а host crashes не превращаются в удобные гостевые ошибки.

Куда дальше

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

Диагностика · Решающие правила