【Visual Lisp】两种出错处理方式
两种出错处理方式:一种是对出错函数进行重定义,一种是对错误进行捕捉处理。
- ;;===================================================================================================
- ;;===================================================================================================
- ;;===========================================两种出错处理方式========================================
- ;;===================================================================================================
- ;;===================================================================================================
- ;;=============================================01.出错函数===========================================
- (defun c:tt()
- ;;备份系统出错函数
- (setq *error*_bak *error*)
- ;;将自定义出错函数赋值给系统出错函数
- (setq *error* *error*_non)
- ;;备份捕捉
- (setq osmode_bak (getvar "osmode"))
- ;;----------------------------------------
- )
- (getpoint)
- (command "line" pause pause "")
- ;;----------------------------------------
- ;;正常执行也要还原出错函数
- (setq *error* *error*_bak)
- ;;正常执行也要还原修改的变量
- (setvar "osmode" osmode_bak)
- )
- ;;定义自己的出错函数
- (defun *error*_non (msg)
- ;;对于CAD内置command命令执行的使用(command)取消执行,然后执行后面语句
- (command)
- ;;将系统出错函数进行还原
- (setq *error* *error*_bak)
- ;;出错后还原修改的变量
- (setvar "osmode" osmode_bak)
- )
- ;;=============================================02.错误捕捉===========================================
- ;;功 能:命令是否存在
- ;;参 数:命令字符串
- ;;返回值:存在为T,否则为nil
- (defun isCommandExist(commandstr / candcommandstr isexist myvalue)
- (setq cAndCommandStr (strcat "c:" commandStr))
- (if (equal (type (eval (read cAndCommandStr))) 'subr)
- ;;说明是用lisp的defun定义的命令
- (progn
- (setq isExist T)
- ;(print "命令存在!")
- )
- ;;不是lisp中defun定义的命令
- (progn
- (if
- ;;if判断的条件
- (not
- ;;捕捉错误,错误存在为T,不存在为FALSE
- (vl-catch-all-error-p
- ;;将语句执行结果返回给myvalue,语句执行出错myvalue值为#<%catch-all-apply-error%>,不出错的话就是语句执行后的结果
- (setq myvalue
- ;;执行语句,并且用vl-catch-all-apply捕捉错误,注意后面的格式,第一个为函数注意前面用单引号,后面为函数参数表
- (vl-catch-all-apply '(lambda (x) (progn (command x) (setq lastCommand (getvar "LASTPROMPT")) (if (not (wcmatchlastCommand "*未知命令*")) (command "ESC")))) (list commandStr))
- )
- )
- )
- ;;if条件后的第一条语句
- ;;如果执行出错就执行下面这句
- (progn
- (setq isExist nil)
- ;(print "命令不存在!")
- )
- ;;if条件后的第二条语句
- ;;如果执行出错,就捕捉错误,执行下面这句
- (progn
- (setq isExist T)
- ;(print "命令存在!")
- )
- );;end if
- ;;取消命令操作
- (if isExist
- (progn
- (command)
- )
- );;end if
- );;end progn
- );;end if
- ;;输出值,命令存在时是T,否则是nil
- isExist
- )
【Visual Lisp】两种出错处理方式的更多相关文章
- Web APi之认证(Authentication)两种实现方式【二】(十三)
前言 上一节我们详细讲解了认证及其基本信息,这一节我们通过两种不同方式来实现认证,并且分析如何合理的利用这两种方式,文中涉及到的基础知识,请参看上一篇文中,就不再叙述废话. 序言 对于所谓的认证说到底 ...
- Android中BroadcastReceiver的两种注册方式(静态和动态)详解
今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来 ...
- Android中Fragment与Activity之间的交互(两种实现方式)
(未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文<Android中Fragment的两种创建方式>,就如 ...
- JavaScript 函数的两种声明方式
1.函数声明的方式 JavaScript声明函数有两种选择:函数声明法,表达式定义法. 函数声明法 function sum (num1 ,num2){ return num1+num2 } 表达式定 ...
- Redis两种持久化方式(RDB&AOF)
爬虫和转载请注明原文地址;博客园蜗牛:http://www.cnblogs.com/tdws/p/5754706.html Redis所需内存 超过可用内存怎么办 Redis修改数据多线程并发—Red ...
- struts2+spring的两种整合方式
也许有些人会因为学习了struts1,会以为struts2.struts1与spring的整合也是一样的,其实这两者相差甚远.下面就来讲解一下struts2与spring的整合两种方案.(部分转载,里 ...
- easyui datagride 两种查询方式
easyui datagride 两种查询方式function doReseach() { //$('#tt').datagrid('load', { // FixedCompany: $('.c_s ...
- 两种include方式及filter中的dispatcher解析
两种include方式 我自己写了一个original.jsp,另外有一个includedPage.jsp,我想在original.jsp中把includedPage.jsp引进来有两种方式: 1.& ...
- Java多线程13:读写锁和两种同步方式的对比
读写锁ReentrantReadWriteLock概述 大型网站中很重要的一块内容就是数据的读写,ReentrantLock虽然具有完全互斥排他的效果(即同一时间只有一个线程正在执行lock后面的任务 ...
随机推荐
- 有关于java反编译工具的使用
有时候想去查看jar包中的class文件中的代码,但是class文件如果没有进行反编译操作的话,代码无法直观的查看.这时候可以使用jadeclipse对class文件进行反编译的操作. 1.首先这里需 ...
- ViewPager+Fragment实现页面的切换
新知识,新摘要: 效果图:framgent导入包都是v4包下,谨慎导入错误! 首先设置viewPager布局: <?xml version="1.0" encoding=&q ...
- oracle 身份证校验函数
1.正则表达式写法: CREATE OR REPLACE FUNCTION Func_checkidcard (p_idcard IN VARCHAR2) RETURN INT IS v_regstr ...
- android虚拟机
参考:http://baike.baidu.com/link?url=06bC3y5DSQ7DQ_QbEr6hTfMNpmg2f-39w6FpU69xxkbNoJ5OR4N9xCKoMwMMGTZfF ...
- sql server 查询和Kill死锁进程
查询死锁进程语句 select request_session_id spid, OBJECT_NAME(resource_associated_entity_id) tab ...
- hdu 1872(看病要排队)(优先队列)
看病要排队 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- URL传递中文乱码的问题
在AJAX浏览器来进行发送数据时,一般它所默认的都是UTF-8的编码. 使用JQUERY中所提供的方法来做操作 encodeURI function verify() { //解决中文乱麻问题的 ...
- h5 js 图片预览并判断 ajax上传
//建立一個可存取到該file的url function getObjectURL(file) { var url = null; if (window.createObjectURL != unde ...
- 解決 java.security.cert.CertificateException: Certificates does not conform to algorithm constraints
找到 jre/lib/security/java.security 将 jdk.certpath.disabledAlgorithms=MD2, DSA, RSA keySize < 2048 ...
- django 1.8 评论库comments配置问题
comments库是django框架内置的评论库,可以快速搭建网站需要的评论系统.不过1.8的配置和1.6的出现了一点小小配置,由于刚刚接触,按照网上的文档配置,需要在 settings.py的INS ...