Песочница

Ошибки, предупреждения и диагностика

Ошибки чтения, нормализации, выполнения и ресурсов, а также предупреждения относятся к разным этапам и детерминированным каналам.

Когда это нужно

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

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

LISPEX
(guard (e (else (error-object-message e))) (car 1))

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

OUTPUT
"car: expected a pair, got 1"

Разбор примера

car получает 1 вместо пары и выдаёт перехватываемую ошибку выполнения. guard принимает объект ошибки и возвращает его стабильное сообщение. Программа завершается строкой, а не трассировкой стека среды.

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

  • Ошибки выполнения используют коды E3xx, стабильные шаблоны, детерминированную печать проблемных значений и диапазон охватывающего вызова.
  • Предупреждения — упорядоченные наблюдения. Настоящий вызов % выдаёт W330 перед передачей работы modulo; настоящие вызовы list-first и list-rest выдают W331 перед car и cdr. Каждое место исходника предупреждает один раз, перекрывающее связывание не предупреждает, а последующая ошибка не удаляет уже записанное предупреждение.
  • Первая неперехваченная ошибка прерывает выполнение без трассировки стека среды; исчерпание ресурсов остаётся вне перехватываемых E3xx.

Быстрый выбор

КлассКогда возникаетПервое действие
E1xx чтениеисходник нельзя превратить в данныеисправить выделенный токен или разделитель
E2xx нормализациястатическая форма невернапроверить написание, положение и арность формы
E3xx выполнениевычисление дошло до недопустимой операциипроверить названную процедуру и проблемные значения
W3xx предупреждениеустаревающая поверхность, выполнение продолжаетсяперейти к указанной замене
ресурсный исходдостигнут потолок профиляуменьшить работу или выбрать нужный профиль

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

Предупреждение не является stdout и не должно переставляться или сливаться с диагностикой.

В новом коде используйте modulo, first и rest. Устаревающие написания остаются исполнимыми только для совместимости.

Текущие границы

  • Паника платформы, пустой сбой и недетерминированный текст среды не являются допустимой гостевой диагностикой.

Куда дальше

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

Каталог диагностик · Руководство по ошибкам