明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4628|回复: 7

[讨论] 出错处理案例解析

[复制链接]
发表于 2011-1-13 09:21 | 显示全部楼层 |阅读模式
本帖最后由 redcat 于 2011-2-12 12:40 编辑

  1. ;;;错误处理教程-1
  2. (defun c:tt1 (/  varlst var_old var_new)
  3.   (defun *error* (inf)
  4.     (setq inf (strcase inf t)) ;将出错信息转换为小写字符串
  5.     (cond
  6.          ((wcmatch inf "*break,*cancel*,*exit*,*取消*") ;|按了<Esc>键出错处理|;
  7.            (princ "\n用户按了<Esc>强制退出\n")
  8.            (mapcar 'setvar varlst var_old)
  9.           )
  10.         (t ;|其余错误处理|;
  11.             (princ (strcat "\n" inf))
  12.             (mapcar 'setvar varlst var_old)
  13.         )
  14.     ) ;_ 结束cond
  15.     (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
  16.     (princ)
  17.   ) ;_ 结束defun
  18.   (vla-StartUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
  19.   (setq varlst '("osmode")
  20.            var_new '(0)
  21.            var_old (mapcar 'getvar varlst)
  22.   ) ;_ 结束setq
  23.   (mapcar 'setvar varlst var_new)
  24.   (princ "\n按<Esc>强制退出, <空格>/<Enter>/<右键>错误...")
  25.   (rtos (getreal "\n请输入实数:"));出错后转到内部自定义的*error*函数
  26.   (mapcar 'setvar varlst var_old)
  27.   (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
  28.   (princ)
  29. ) ;_ 结束defun
  30. ;;;错误处理教程-2
  31. (defun c:tt2 (/ err inf varlst var_old var_new)
  32.    (vla-StartUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
  33.    (setq err (vl-catch-all-apply
  34.                                      '(lambda ()
  35.                                                   (setq varlst  '("osmode")
  36.                                                           var_new '(0)
  37.                                                           var_old (mapcar 'getvar varlst)
  38.                                                     ) ;_ 结束setq
  39.                                                    (mapcar 'setvar varlst var_new)
  40.                                                    (princ "\n按<Esc>强制退出, <空格>/<Enter>/<右键>错误...")
  41.                                                    (rtos (getreal "\n请输入实数:"))
  42.                                         ) ;_ 结束lambda
  43.                        ) ;_ 结束vl-catch-all-apply
  44.   ) ;_ 结束setq
  45.   (if (vl-catch-all-error-p err)
  46.           (progn ;|出错处理|;
  47.             (setq inf (strcase (vl-catch-all-error-message err) t)) ;将出错信息转换为小写字符串
  48.             (cond ((wcmatch inf "*break,*cancel*,*exit*,*取消*") ;|按了<Esc>键出错处理|;
  49.             (princ "\n用户按了<Esc>强制退出\n")
  50.             (mapcar 'setvar varlst var_old)
  51.             (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
  52.            )
  53.            (t ;|其余错误处理|;
  54.             (princ (strcat "\n" inf))
  55.             (mapcar 'setvar varlst var_old)
  56.             (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
  57.            )
  58.             ) ;_ 结束cond
  59.             (princ)
  60.           ) ;_ 结束progn
  61.           (progn ;|程序正常运行完毕的处理|;
  62.             (princ "\n")
  63.             (mapcar 'setvar varlst var_old)
  64.             (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
  65.             (princ)
  66.           ) ;_ 结束progn
  67.   ) ;_ 结束if
  68. ) ;_ 结束defun



"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

  • · 收集|主题: 58, 订阅: 4
发表于 2011-1-13 11:48 | 显示全部楼层
出错处理?我编个小程序都是自己用,好像不用出错处理。不过还是要谢谢你。
发表于 2011-1-13 21:34 | 显示全部楼层
发表于 2011-1-13 21:53 | 显示全部楼层
[原创]巧用出错,让你的程序更优雅。
http://bbs.mjtd.com/thread-79360-1-1.html
飞诗(fsxm) 大侠的
 楼主| 发表于 2011-1-14 08:32 | 显示全部楼层
本帖最后由 redcat 于 2011-1-30 09:54 编辑

看来大部分人只知道下载,不知道程序的妙处
发表于 2012-1-7 16:47 | 显示全部楼层
终于有时间来学习出错处理了
发表于 2012-1-9 22:24 | 显示全部楼层
值得好好学习
发表于 2012-7-1 00:38 | 显示全部楼层
半夜看出错处理,我是不是搞错了?[em0]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-4 08:50 , Processed in 0.248564 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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