明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1450|回复: 9

[函数] [熊掌定制]无聊发一个捕获错误的函数

[复制链接]
发表于 2015-2-8 17:23 | 显示全部楼层 |阅读模式
本帖最后由 鱼与熊掌 于 2015-2-8 17:26 编辑
  1. ;截取错误,并且提示
  2. ;con ,错误时候的处理方式
  3. (defun cx-catch(fun lst con / run)
  4.   (setq run(vl-catch-all-apply fun lst))
  5.   (if(vl-catch-all-error-p run)
  6.     (progn
  7.       (setq msg(vl-catch-all-error-message run))
  8.       (setq msg
  9.         (cx-ErrToStr msg)
  10.       )
  11.       (prompt
  12.         (strcat
  13.           "\n运行中发现错误,函数:"
  14.           (vl-symbol-name  fun)
  15.           "\n错误:"
  16.           msg
  17.           "\n"
  18.         )
  19.       )
  20.       (eval con)
  21.     )
  22.     run
  23.   )
  24. )
;发一个实例.

     (foreach x ss1_Dui
                (cx-catch 'cx-Beam-Main (list x) '
                        (progn
                                (prompt "提示:出现错误的标注堆已经改成红色.\n")
                                
                                (apply 'cx-mak-2ptrc (get-box x))
                                (cx-entmod (entlast) '(62 8) '(1 "Defpoints"))
                                (cx-gs x 1)
                        )
                )
        )

;函数2.错误提示转换.
;CAD自带的错误提示总是让人琢磨不透.
;如果整理好已经存在的错误提示,变成中文,或许更好理解.
;程序的原型. 往后完善,或者期待你们的完善.
  1. (defun cx-ErrToStr(msg)
  2.   (cond
  3.     ((= msg "函数被取消")
  4.       (setq msg "用户中止")
  5.     )
  6.     ((= msg "lentityp nil")
  7.       (setq msg "图元为空.")
  8.     )
  9.     (t
  10.       (setq msg (strcat "错误:"msg))
  11.     )
  12.   )
  13. )

评分

参与人数 1明经币 +1 收起 理由
USER2128 + 1 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2015-2-8 18:23 | 显示全部楼层
熊掌又来了!
 楼主| 发表于 2015-2-8 18:59 | 显示全部楼层
illcyt 发表于 2015-2-8 18:23
熊掌又来了!

请注意 这不是委员吗.
发表于 2015-2-9 08:33 | 显示全部楼层
顶一个!!
发表于 2015-2-9 12:28 | 显示全部楼层
鱼与熊掌 发表于 2015-2-8 18:59
请注意 这不是委员吗.

啥情况,委员?!
发表于 2015-2-9 12:58 | 显示全部楼层
支持一下
发表于 2015-2-9 15:58 | 显示全部楼层
赞一个先,虽然看的不是很懂
发表于 2015-2-10 09:11 | 显示全部楼层
我一直想要一个这样的程序,类似于VBA的 On error goto  。
因为很多程序设置了全局变量,如果和别的程序命名相同,而赋值类型不同,经常会出现不匹配的错误。
如果程序本身能捕捉到错误,并执行重新初始化的语句,然后重新执行程序,就可以解决问题了。。。
 楼主| 发表于 2015-2-10 13:17 | 显示全部楼层
fl202 发表于 2015-2-10 09:11
我一直想要一个这样的程序,类似于VBA的 On error goto  。
因为很多程序设置了全局变量,如果和别的程序命 ...

那就是错误处理,并且重新运行程序?  这个在错误处理的运用中有说到的.可以参见G版的帖子.
我这个是为了捕获单句.你这个是为了捕获整个程序的错误.
可以定义error函数.
如.
  1. (defun cxsta (/ msg)
  2.         (cx-begin '(("cmdecho" 0) 0 (cx-Rev-Scr)))
  3.         (setq *scrpts* (cx-get-Scr2Pt))
  4.         (setq $lt-errormsg$
  5.                 'cx-ErrToStr
  6.         )
  7. )
;当错误时,运行 cx-rev-scr  这个是我自定义函数  意思是运行屏幕效果返回.
发表于 2015-2-11 09:14 | 显示全部楼层
鱼与熊掌 发表于 2015-2-10 13:17
那就是错误处理,并且重新运行程序?  这个在错误处理的运用中有说到的.可以参见G版的帖子.
我这个是为了捕 ...

谢谢提醒!
把初始化语句放到错误处理的函数中去,不用重新执行函数。这样就避免了全局变量与其它程序冲突,导致程序出错的事了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-4 15:58 , Processed in 1.051619 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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