明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1477|回复: 7

[提问] *error*函数在CAD2014中还有没有作用

[复制链接]
发表于 2019-11-24 23:01:52 | 显示全部楼层 |阅读模式
  • (defun *myerr*(msg)
  •   (alert "yxl")
  •   (princ "aaaaaaaaaa")
  •   (setq *error* olderr)
  • )
  • (defun C:t1()
  •   (setq olderr *error* *error* *myerr*)
  •   (repeat 10000
  •      (command "line" '(0 0) '(100 100) "")
  •   )
  •   (setq *error* olderr)
  • )
  • ;;试了很多种写法。按esc不会自动调用,变量没法恢复。感觉上面写法再简单不过了,
    结果都是一点反应都没有。论坛找了好多处理方法,结果一个样没反应。
    是不是这个函数
    已经废除

发表于 2019-11-25 14:04:44 | 显示全部楼层
  *error* 是在意外中断的情况下才执行的
(defun *myerr* (msg) (alert "yxl") (princ msg) (princ "\naaaaaaaaaa") (setq *error* olderr))
(defun c:t1 ()
  (setq        olderr        *error*
        *error*        *myerr*
  )
  (command "line" '(100 100) pause)
  (setq *error* olderr)
)
你执行上面的代码 然后按ESC你就会知道了
发表于 2019-11-25 14:44:24 | 显示全部楼层
如果按你这样子测试 你按ESC是回到VLISP调试器中 并没有出错中断的 只是中断了循环 所以得不到你想要的结果
 楼主| 发表于 2019-12-5 12:50:35 来自手机 | 显示全部楼层
wen1235 发表于 2019-11-25 14:44
如果按你这样子测试 你按ESC是回到VLISP调试器中 并没有出错中断的 只是中断了循环 所以得不到 ...

请问程序执行结束后按esc退出程序(因为自己做的程序是死循环,只能按esc退出),该怎么写错误处理,自己写的没任何作用。每次按esc退出,系统变量都不能自动恢复,求教谢谢
发表于 2019-12-5 13:25:13 | 显示全部楼层
(defun C:tt (/ *error* error_bak)
        (defun t-*error* (msg)
                (setq *error* error_bak)
                (alert "错误函数成功")
        )
        (setq error_bak *error*)
        (setq *error* t-*error*)
        (getpoint)
        (setq *error* error_bak)
)
发表于 2019-12-5 14:01:26 | 显示全部楼层
czww26 发表于 2019-12-5 12:50
请问程序执行结束后按esc退出程序(因为自己做的程序是死循环,只能按esc退出),该怎么写错误处理,自己写 ...

你要说清楚啊 如果是变量没恢复的话 你的程序中本来就没有恢复变量的代码 怎么会还原呢 你可这样测试 把下面代码存为文件 关了CAD 再开CAD就不要在打开VLISP调试器了 你用手动加载刚才的文件执行 按退出 你就明白了 
(defun c:t1 ()
  (defun *myerr* (msg)
    (mapcar 'eval sysvarlst) ;;恢复变量值 
    (alert "yxl")
    (princ msg)
    (princ "\naaaaaaaaaa")
    (setq *error* olderr)
  )
  (setq        olderr        *error*
        *error*        *myerr*
  )
  (setq        sysvarlst (mapcar (function (lambda (n) (list 'setvar n (getvar n)))) ;;先取改变前的变量名和值保存
                          '("osmode" "cmdecho" "orthomode" "osnapcoord" "textsize")
                  )
  )
  (setvar "osmode" 0)    ;改变变量值
    (repeat 10000
     (command "line" '(0 0) '(100 100) "")
  )
  (mapcar 'eval sysvarlst) ;;恢复变量值
  (setq *error* olderr)
)
发表于 2020-8-9 13:54:14 | 显示全部楼层
wen1235 发表于 2019-12-5 14:01
你要说清楚啊 如果是变量没恢复的话 你的程序中本来就没有恢复变量的代码 怎么会还原呢 你可这样测试 ...

感谢分享方法,确实有效,十分感谢
发表于 2022-8-19 12:52:29 | 显示全部楼层
感谢大佬分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-15 15:14 , Processed in 0.175483 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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