Auto CAD

Обработка ошибок


В последней программе я использовал обработку ошибок, потому что в случае выхода из программы до ее окончания вы оставались с неожиданным положением ПСК. Теперь давайте посмотрим, как действует обработка ошибок.

Обработка ошибок предназначена для возвращения системы в исходное состояние, если пользователь захочет досрочно остановить программу и нажмет клавишу <Esc>. Вы видите, что в этом случае могут быть проблемы с программами, которые в процессе работы вносят изменения, например, в систему координат или меняют значения системной переменной OSNAP, чтобы управлять объектной привязкой. Вы же не хотите, чтобы пользователи AutoCAD после применения вашей функции AutoLISP были неприятно удивлены.

Функции перехвата ошибок описываются точно так же, как и все функции AutoLISP, т. е. с использованием defun и без С: перед именем функции. После того, как вы опишете функцию перехвата ошибок, вы можете использовать ее

в любых ваших программах, для этого используйте setq, чтобы присвоить ее переменной AutoLISP error. Это специальная переменная в AutoLISP, но она не имеет значения до тех пор, пока оно не будет присвоено функцией

SETQ.

Есть два вида стратегии для перехвата ошибок: специфическая и общая. В общей стратегии AutoCAD применяется команда UNDO (ОТМЕНИТЬ), чтобы поставить метки. В ответ на ошибку обработчик ошибок откатывает AutoCAD назад до метки. В этой стратегии скрываются потенциальные проблемы, которые могут привести к серьезным последствиям, поэтому я вам ее не рекомендую. Вместо этого я советую создавать специфическую функцию перехвата ошибок для каждой программы, которая в процессе выполнения что-либо меняет — например, значения системных переменных или открытые файлы.

Я рекомендую для обработки ошибок следующие шаги:

1.   В начале каждой команды, создающей новые объекты, используйте опцию BEgin (Начало) команды UNDO (ОТМЕНИТЬ), чтобы начать группу команд UNDO (ОТМЕНИТЬ). Таким образом, если пользователю не понравится результат работы программы, он сможет отменить его одним вызовом UNDO (ОТМЕНИТЬ).

2.   Сохраняйте настройки всех системных переменных или переменных окружения операционной системы, которые меняются в процессе выполнения программы, для этого присваивайте их значения программным переменным при ПОМОЩИ функции SETQ.

3.   Напишите функцию перехвата ошибок, которая вернет этим переменным исходные значения, если во время работы программы произойдет сбой.

Комментарии закрыты