找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 729|回复: 6

[LISP函数]:自定义出错处理函数

[复制链接]
发表于 2004-12-9 13:19:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
(if
  (or
    (/= msg "Function cancelled")
    (= msg "quit / exit abort")
  )
(princ)
  (princ (strcat "\nError: " msg))
)
     以上代码摘自autocad帮助对于出错处理的示例代码。
1.为什么是(/= msg "Function cancelled"),而不是(= msg "Function cancelled")呢?
2.难道非得判断一下错误信息是什么,如果干脆无论是什么错误,都执行一样的处理,即(if msg ....,可以吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 488个

财富等级: 日进斗金

发表于 2004-12-9 23:10:20 | 显示全部楼层
msg有很多种,cad出错的提示而已
反过来就可以判断是什么错误:每种错误就可以有不同的应对方法.

一般按了esc就会有你写的msg提示(不过是英文版)

我以前贴过一个的
最好看一下帮助(相应的要翻译成中文)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-12-10 19:05:14 | 显示全部楼层
回斑竹:
    按了“ESC”键MSG应该是返回 “Function cancelled”吧,那我第一帖里的例子的意思是如果用(QUIT)之类的函数退出程序,按提供的出错处理程序处理,如果是按ESC退出的,就什么也不做,是吧?有这个必要把这两种情况区分开吗?
    *error*这个函数cad帮助里说的并不清楚,还请斑竹指点迷津。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-11 14:50:48 | 显示全部楼层
不知道楼主的代码是从哪里看到的?
从代码意思来看,只要是按下ESC键之外的错误均不提示,那错误函数不就没意思了?
在我这里的文档里,错误处理是这样描述的……

[I]在定义您自己的 *error* 函数之前,保存 *error* 的当前内容,这样可在退出时恢复原先的错误处理程序。当存在错误条件时,
AutoCAD 调用当前定义的 *error* 函数并传给它一个参数,该参数是一个描述错误性质的文本字符串。*error* 函数应该设计为在 ESC
(取消)或 exit 函数调用后静默退出。实现此功能的标准方法是在自定义的错误处理例程中包括如下语句:

(if
  (or
    (= msg "Function cancelled")
    (= msg "quit / exit abort")
  )
  (princ)
  (princ (strcat "\nError: " msg))

)

此代码检查传送给它的错误信息,并确保向用户通知错误的类型。如果用户在运行错误处理程序时取消了该程序,则此代码不返回任何内容。同样,如果在代码中处理了错误条件并调用了 exit 函数,也不会返回任何内容。它假定程序中已经用打印语句解释了错误的类型。记住如果不想在错误处理程序结束时打印返回值,请在该程序最后调用 princ 函数。
[/I]

当然如果您愿意在不加任何判断的情况返回信息也可以,那是您的自由^_^
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-12-11 18:55:58 | 显示全部楼层
[QUOTE]最初由 John 发布
[B]不知道楼主的代码是从哪里看到的?
从代码意思来看,只要是按下ESC键之外的错误均不提示,那错误函数不就没意思了?
在我这里的文档里,错误处理是这样描述的……

附AUTOCAD R14中文版帮助的屏幕截图:
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-12 13:37:25 | 显示全部楼层
这段代码很简单,读一下代码就明白意思,楼主顶楼提出的第一个问题也是基于代码的不合理,所以楼主看的帮助文件代码明显错误。
cad2000以上的帮助文件没有这样的错误,我就不截图证明了。
btw:.看cad2000中文版的帮助比较好,不但全中文,而且有Visual LISP 的扩展。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-12-12 20:42:25 | 显示全部楼层
我搞明白了。其实*error*也是一个普通的函数,只不过用法不大一样,要先保存旧的,设置新的,最后改回旧的,就这么简单。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-18 21:48 , Processed in 0.321960 second(s), 44 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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