Lisp程序设计错误处理程序
本帖最后由 vlisp2012 于 2013-5-15 14:33 编辑在明经里学习了很久。非常感谢这个平台和版主及众多的高手。
程序出现错误后,后面的恢复系统变量值的代码则不会执行,程序关闭了捕捉模式、当前的图层状态等等。我们不得不手动来重新设置捕捉方式。
先把我今天现学现用的程序出错处理程序,分享给大家。
下面的代码是G版提供的,我只是摘抄了几行,做成了两个很小的子程序,够新手使用了。希望大家有什么好的建议和批评给我指出来,共同交流下。
应用:
(defun c:命令名 ();;;e_lst不可以设为局部变量
(ini-0)
主程序开始
………………
主程序结束
(ini-1 e_lst)
)
(defun ini-0 (/ myerror n);;;程序初始化及自定义错误处理函数
(setq olderror *error*)
(setq *error* myerror)
(setq
e_lst (mapcar (function (lambda (n) (list 'setvar n (getvar n))))
'("autosnap" "osmode" "aperture"
"hpspace" "hpassoc" "mirrtext"
"auprec" "luprec" "dimzin"
"cecolor" "clayer"
)
)
)
(defun *error* (msg)
(mapcar 'eval e_lst)
(if (not (member
msg
'(nil "函数被取消" ";错误:quit / exit abort")
)
)
(princ (strcat ";错误:" msg))
)
)
)
====================================================================================
(defun ini-1 (e_lst);;;恢复系统变量
(mapcar 'eval e_lst)
(setq *error* olderror)
) cad890 发表于 2019-5-24 12:46
在开始更改之前,结束更改之后
老哥,这样吗
(defun ini-0 (/ myerror n);;;程序初始化及自定义错误处理函数
(setvar "CMDECHO" 0)
(command-s "undo" "be")
(setq olderror *error*)
(setq *error* myerror)
(setq
e_lst (mapcar (function (lambda (n) (list 'setvar n (getvar n))))
'("autosnap" "osmode" "aperture"
"hpspace" "hpassoc" "mirrtext"
"auprec" "luprec" "dimzin"
"cecolor" "clayer"
)
)
)
(defun *error* (msg)
(mapcar 'eval e_lst)
(if (not (member
msg
'(nil "函数被取消" ";错误:quit / exit abort")
)
)
(princ (strcat ";错误:" msg))
)
)
)
====================================================================================
(defun ini-1 (e_lst);;;恢复系统变量
(setvar "CMDECHO" 0)
(mapcar 'eval e_lst)
(setq *error* olderror)
(command-s "undo" "e")
) (defun ini-0 (/ myerror n);;;程序初始化及自定义错误处理函数
(setvar "CMDECHO" 0)
(command-s "undo" "be")
(setq olderror *error*)
(setq *error* myerror)
(setq
e_lst (mapcar (function (lambda (n) (list 'setvar n (getvar n))))
'("autosnap" "osmode" "aperture"
"hpspace" "hpassoc" "mirrtext"
"auprec" "luprec" "dimzin"
"cecolor" "clayer"
)
)
)
(defun *error* (msg)
(mapcar 'eval e_lst)
(if (not (member
msg
'(nil "函数被取消" ";错误:quit / exit abort")
)
)
(princ (strcat ";错误:" msg))
)
)
)
====================================================================================
(defun ini-1 (e_lst);;;恢复系统变量
(setvar "CMDECHO" 0)
(mapcar 'eval e_lst)
(setq *error* olderror)
(command-s "undo" "e")
) 烟盒迷唇 发表于 2019-5-23 16:06
回退添加到哪里去
在开始更改之前,结束更改之后 分享是美德,顶楼主 把回退一起加到里面效果更好 多谢楼上的建议,是应该加上,忽略了。 个人编程习惯
在程序的前两行:(setq c_osmod (getvar "osmode"))
(command "-osnap" "end,int")
程序中尽量不用CAD命令画图元,而用“entmake”生成。
在程序的结尾两行:(setvar "osmode" c_osmode)
(princ)
出错后“U”一下就不影响系统变量了 回退添加到哪里去 cad890 发表于 2019-5-24 12:46
在开始更改之前,结束更改之后
好的,谢谢 有这个,程序才完美
把回退一起加到里面效果更好
页:
[1]
2