明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: nonsmall

[原创]On Error Resume Next 的Lisp方法--出错继续的另类方法

  [复制链接]
 楼主| 发表于 2009-9-24 16:51:00 | 显示全部楼层

萝卜的思路正确

发表于 2009-10-19 00:39:00 | 显示全部楼层
好思路,学习。
发表于 2010-11-3 15:12:00 | 显示全部楼层
还不是很理解楼上几位高手的思路。
ESC多按几次,连自定义的出错函数myerr也会被中断,这样就无法达到恢复原始状态的效果。

我的源程序如下:
(defun myerr (errmsg)
    (setvar "osmode" old_os)
    (setvar "cmdecho" old_echo)
    (setvar "clayer" old_lay)
    (command "_.undo" "_end")
    (command "_.undo" "")
    (setq *error* old_err)
    (princ (strcat "\n出现的错误:"
                   errmsg
                   "已经回归."
           )
    )
    (princ)
  )
  (defun funstart ()
    (setq old_echo (getvar "cmdecho"))
    (setq old_os (getvar "osmode"))
    (setq old_lay (getvar "clayer"))
    (setq old_err *error*)
    (setq *error* myerr_dr)
    (command "_.undo" "_begin")
    (setvar "cmdecho" 0)
    (setvar "osmode" 0)
  )
  (defun funend ()
    (setvar "osmode" old_os)
    (setvar "cmdecho" old_echo)
    (setvar "clayer" old_lay)
    (setq *error* old) ;;;设置自定义出错函数。
    (command "_.undo" "_end")
    (princ)
  )

如果给函数myerr加上后如下面函数myerr2,多按几次ESC还是中断,没办法执行到回到初始状态。
请问如何解决呢?

(defun myerr2 (errmsg)
  (vl-catch-all-error-p
    (vl-catch-all-apply
      '(lambda ()
         (setvar "osmode" old_os)
         (setvar "cmdecho" old_echo)
         (setvar "clayer" old_lay)

       )
    )
  )
  (command "_.undo" "_end")
  (command "_.undo" "")
  (setq *error* old_err)
  (princ (strcat "\n出现的错误:"
                 errmsg
                 "已经回归."
         )
  )
  (princ)
)
发表于 2011-4-25 21:35:06 | 显示全部楼层
这个要好好学习.我的程序老是在按ESC时把CAD给搞崩溃了
发表于 2011-4-25 23:20:52 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2011-12-17 19:47:38 | 显示全部楼层
确实lisp程序调试太繁琐了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-9 09:10 , Processed in 0.206595 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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