明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2864|回复: 9

[LISP]如何自定义错误处理函数?

[复制链接]
发表于 2005-11-9 11:30:00 | 显示全部楼层 |阅读模式

程式中经常强行退出,

如何自定义错误处理函数?请教!!!

发表于 2005-11-9 12:10:00 | 显示全部楼层

reply

本帖最后由 作者 于 2005-11-9 20:10:55 编辑

(defun #err (s)
    (princ)
)

(defun c:test ( / $orr)
    (setq $orr *error*)
    (setq *error* #err)   ;当程序出错时就会执行#err函数

    ;...main code...

    (setq *error* $orr)
    (princ)
)

发表于 2005-11-9 19:20:00 | 显示全部楼层
没看得太明白!
发表于 2005-11-9 20:49:00 | 显示全部楼层

在程序开始部分加(setq *error*  #err)

(setq *error*  #err) ;;;;;;;;;  #err(msg)为子程序,把他付值给*error*,程序运行

中出错时调用它,

发表于 2005-11-10 09:03:00 | 显示全部楼层

程序出错时,系统会自动调用*error*函数,这个函数系统已经定义,你也可以重新定义,但如果重新定义,就会导致其他程序出错时也使用了你定义的这个出错函数,导致出错提示混乱,,,所以定义一个临时的错误处理函数,在程序中暂时代替*error*函数,程序的最后再恢复系统的*error*函数,就是(setq *error* #err),前面那句就是保存系统的*error*函数,以便恢复,,

另,在自定义的出错函数里最好也恢复一下,否则真出错就没有恢复了,更改如下:

(defun #err (s)
    (princ)

  (setq *error* $orr)
)

(defun c:test ( / )
    (setq $orr *error*)
    (setq *error* #err)   ;当程序出错时就会执行#err函数

    ;...main code...

    (setq *error* $orr)
    (princ)
)

 楼主| 发表于 2005-11-11 13:13:00 | 显示全部楼层

请问飞哥:我编了20个lisp程式(都在用),下面的一段代码可不可以只用一个

(defun #err (s)
    (princ)

  (setq *error* $orr)
)

 

发表于 2005-11-11 15:17:00 | 显示全部楼层
如果你的这20个LISP程序的错误处理要求都相同的话,可以的
发表于 2008-10-12 17:22:00 | 显示全部楼层
不错,又学到一招,谢谢
发表于 2008-10-19 20:59:00 | 显示全部楼层

还是不懂啊!

发表于 2012-8-1 20:31:46 | 显示全部楼层
学习~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-7-21 23:44 , Processed in 0.206466 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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