明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4509|回复: 11

[函数] Lisp程序设计错误处理程序

  [复制链接]
发表于 2013-5-11 19:32:05 | 显示全部楼层 |阅读模式
本帖最后由 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)
)

评分

参与人数 3明经币 +3 金钱 +50 收起 理由
断箭 + 1 赞一个!
1993063 + 1 山寨
jicqj + 1 + 50 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2022-4-30 09:03:00 | 显示全部楼层
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")
)
发表于 2022-4-30 09:01:13 | 显示全部楼层
(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-24 12:46:26 | 显示全部楼层

在开始更改之前,结束更改之后
发表于 2013-5-11 23:36:45 | 显示全部楼层
分享是美德,顶楼主
发表于 2013-5-12 01:45:51 | 显示全部楼层
把回退一起加到里面效果更好
 楼主| 发表于 2013-5-12 09:36:25 | 显示全部楼层
多谢楼上的建议,是应该加上,忽略了。
发表于 2013-10-8 17:59:24 | 显示全部楼层
个人编程习惯
在程序的前两行:(setq c_osmod (getvar "osmode"))
                              (command "-osnap" "end,int")

程序中尽量不用CAD命令画图元,而用“entmake”生成。

在程序的结尾两行:(setvar "osmode" c_osmode)
                                 (princ)

出错后“U”一下就不影响系统变量了
发表于 2019-5-23 16:06:44 | 显示全部楼层
回退添加到哪里去
发表于 2019-5-24 16:56:18 | 显示全部楼层
cad890 发表于 2019-5-24 12:46
在开始更改之前,结束更改之后

好的,谢谢
发表于 2019-6-3 09:50:31 | 显示全部楼层
有这个,程序才完美
发表于 2022-4-30 08:52:54 | 显示全部楼层
把回退一起加到里面效果更好
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-14 14:35 , Processed in 0.418843 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表