| ||
一、errset函数基本介绍:
如果使用errset函数,可以将t作为第二个参数传递给errset,打印errset中遇到的错误信息,默认为nil。或者可以通过errset.errset获取信息。例如:
errset(testing() t)
*Error* times: can't handle ("try" * 2)
unless(errset(testing())
printf("GOT THIS: %L\n" errset.errset)
);unless
运行结果:GOT THIS: ("times" 0 t nil ("*Error* times: can't handle (\"try\" * 2)"))
二、errset.errset变量的介绍:
errset(1+"text") println(errset.errset)
errset(1+"text") errset.errset
当在CIW运行时,要确保errset.errset变量在Virtuoso设计环境中不会被内部修改,不要将errset和errset.errset分开。
运行结果:
("plus" 0 t nil
("*Error* plus: can't handle (1 + \"text\")")
)
结果解释:
The list consists of:
* errorClass -- for us, the routine giving the error
* errorNumber -- a unique number which is the current error count (in some cases)
* continuableFlag -- always true
* printSymbol -- reserved, set to NIL
* messageData -- a list of one or two terms:
* text of message string
* additional instance specific information, if present.
三、errset函数捕获控制SKILL执行过程中的错误:
1. 加载skill文件时,errset函数捕获错误:
unless(errset(load("bad.il"))
printf("Problem loading file\n")
);unless
2. 也可以显示如下错误信息:
unless(errset(load("bad.il") nil)
printf("Problem during %s\n" car(errset.errset))
printf("Error was %s\n" buildString(nth(4 errset.errset)))
);unless
3. 还可以通过以下方法捕捉警告:
getWarn() ;;;warning被拦截并存储在全局变量中。
unless(errset(load("bad.il") nil)
printf("Problem during %s\n" car(errset.errset))
printf("Error was %s\n" buildString(nth(4 errset.errset)))
let(((wrn getWarn()))
when(wrn
printf("Warning was %s\n" wrn)
);when
);let
);unless
四、errset函数与evalstring函数的结合操作:
FUNCTION: OUTPUT:
evalstring("7") 7
evalstring("7g") SYNTAX ERROR
evalstring("7K") 7000
errset(evalstring("7")) (7)
errset(evalstring("7g")) nil
errset(evalstring("7K")) (7000)
car(errset(evalstring("7"))) 7
car(errset(evalstring("7g"))) nil
car(errset(evalstring("7K"))) 7000