Cadence Skill 论坛

标题: SKILL编程常见报错及解决办法(持续更新中……) [打印本页]

作者: vivien luo    时间: 2013-3-23 23:43
标题: SKILL编程常见报错及解决办法(持续更新中……)
1.系统无回应
如果函数中有返回值,执行函数时,无任何响应。很有可能出犯了了以下错误
1)左括号与右括号不平衡,右括号可能比左括号少;
2)不平衡的引号
3)错误的LOG文件过滤设置
下面列出了两种方法用于解决以上可能出现的问题:
1)使用右括弧(])将所有尚未关闭的右括弧关闭
2)如果使用上面的方法系统还是无响应,可在右括弧(])后面加一个双引号(“)。
通常,使用以上两种方法后,系统将会出现响应。
2.不适当的空格字符
在函数名和左括号之间切记不要留空格,以下例子在函数名和左括号之间出现了空格,函数执行时,产生报错。
1)使用 strcat 函数合并多个字符串
strcat ( “Mary” ” had” ” a” ” little” ” lamb”)
Message: *Error* eval: not a function – “Mary”
2)将函数值分配给一个变量
greeting = strcat ( “happy” ” birthday” )
Message: *Error* eval: unbound variable – strcat
3.不匹配的数据类型
当一个不匹配的字符传递个一个 Skill 函数时,系统将产生报错,错误消息包含一个类型模板,表明该错误是由于什么原因引起的。如下:
strcat( “Mary had a” 5 )
Message: *Error* strcat: argument #2 should be either
a string or a symbol (type template = “S”) – 5

下面分别讲解各种报错:
1.  E- *Error* procedure: too few arguments (at least 2 expected, 1 given) - ((XXX))
     E- *Error* test: too many arguments (2 expected, 3 given)  
     产生以上报错主要由于函数传递的参数不一致导致的。
     比如新建以下函数:
  1. procedure(test(arg1 arg2)
  2.         if(arg1 >= arg2
  3.                 then
  4.                         printf("%d >= %d \n" arg1 arg2)
  5.                 else
  6.                         printf("%d < %d \n" arg1 arg2)
  7.         )
  8. );end procedure
复制代码
  1.     Skill > test(2 3)     
复制代码
执行test(2 3) 函数运行正常,当传递参数不一致时会导致这种错误。
    为避免这种错误,在函数参数中可使用@rest @optional @key关键词。

2.  E- *Error* procedure: illegal formal list - XXX
     产生该报错很可能是由于函数名后面没有立刻出现括号。之间可能存在空格。
  1. procedure(test (arg1 arg2)
  2.         if(arg1 >= arg2
  3.                 then
  4.                         printf("%d >= %d \n" arg1 arg2)
  5.                 else
  6.                         printf("%d < %d \n" arg1 arg2)
  7.         )
  8. );end procedure
复制代码
上面函数中,函数名test与括号之间有个空格,加载的时候会产生该报错。

3.E- *Error* axlFormDisplay: argument #1 should be any user-defined (other) type (type template = "o") - nil
该问题一般出现在FORM不能显示,产生该报错一般是因为FORM文件有误。未加载成功。比如将FIELD写成FILED。这种问题必须一个一个仔细的检查。FROM的格式很严格,一点小问题都不能出现,否则FORM不能顺利加载。。。

4.E- *Error* greaterp: can't handle (nil > 3623.6)
出现该问题,是因为使用了大于符号,但传递的参数中有一个值为nil,不能进行比较运算。因此产生该错误。类似的还有小于。
  1. procedure(Compare(a b)
  2.         if(a>b
  3.         then
  4.                 axlUIWPrint(nil "a>b")
  5.         else
  6.                 axlUIWPrint(nil "a<=b")
  7.         );end if
  8. )
复制代码
Skill > Compare(23 nil)
E- *Error* greaterp: can't handle (23 > nil)
ERROR
Skill > Compare(3 5)
a<=b
t

5.*Error* load: can't access file
出现这种错误一般是由于加载SKILL的时候未找到文件,请确认加载路径正确。检查文件名是否有误。若无法找到原因,可使用绝对路径加载试试。

6.W- *WARNING* (axlDBAddProp): Not a floating point number!
出现这个问题,我也纠结了很久。源代码如下:

  1. HIGH_VALUE = axlUIPrompt( "Please Input High" "0")
  2. axlDBAddProp(selComps '("HIGH" HIGH_VALUE))
复制代码
仔细检查,才发现原来是list使用错了。当使用单引号指定list时,每个元素就为一个值,不能通过变量传递。所有当使用该函数时,将HIGH_VALUE识别成一个值,而不是变量。
最后修改成axlDBAddProp(selComps list("HIGH" HIGH))即可解决报错信息。



持续更新中……
作者: skyzeng    时间: 2013-5-1 20:20
哇,总结的不错哈。
作者: XYX365    时间: 2013-6-20 10:34
本帖最后由 XYX365 于 2013-6-20 10:36 编辑

E- *Error* defun: argument #1 should be a symbol (type template = "sgg") - _Check_Refdes_main()
=>必須將_Check_Refdes_main() 改為_Check_Refdes_main () , main () 之間要空格

作者: appler    时间: 2013-8-9 13:21
总结的很好,辛苦了
作者: eagle31    时间: 2013-10-4 15:07
总结的不错!辛苦辛苦
作者: sisic    时间: 2014-1-2 21:14
謝謝分享喔  學習了
作者: owencai    时间: 2014-1-6 08:12
学习了,谢谢分享
作者: inscribe    时间: 2014-5-1 23:41
建议楼主也把正确的写上去
作者: msiwang    时间: 2014-5-13 11:01
謝謝分享喔  學習了
作者: defir    时间: 2014-12-15 23:07
这个很有用的,感谢!
作者: linuxfor    时间: 2014-12-29 10:52
幸苦了,感谢分享经验
作者: PKN1216083420    时间: 2015-1-23 13:43
太感谢了,谢谢老师!
作者: cuiergongzhu    时间: 2015-6-19 09:39

作者: calmsea68    时间: 2015-11-27 11:19
正是我要找的答案,谢了罗老大
作者: wintonlee    时间: 2016-5-10 10:56
正好解决了一个问题
作者: wintonlee    时间: 2016-6-1 16:10
说好的持续更新呢
作者: skny2011    时间: 2016-11-8 08:39
学习了,谢谢大神
作者: taienyong    时间: 2017-4-12 15:32
好东西,有个问题想咨询一下,就是语句中经常出现"\n",这个是其什么作用的?什么时候需要加?
作者: 王开鑫55    时间: 2017-5-27 18:43
E- *Error* procedure: too few arguments (at least 2 expected, 1 given) - ((XXX))
函数里的传递函数必须两个?如:arg1 arg2
procedure(test (arg1 arg2)
但是我发现别人写的一个参数也没有这样的错误,可能这个问题还是没有搞懂
作者: 秋田家的小厨    时间: 2018-2-6 10:44
关于第3个错误。E- *Error* axlFormDisplay: argument #1 should be any user-defined (other) type (type template = "o") - nil
作者: 秋田家的小厨    时间: 2018-2-6 10:46
关于第3个错误。E- *Error* axlFormDisplay: argument #1 should be any user-defined (other) type (type template = "o") - nil
为什么我在这个电脑上能用,不会出现上面这种错误,换个电脑就可以用 了,这是为什么呢.?
skill文件我没有对其作任何的修改。
有大神能帮忙出现这个问题该如何去解决呢?
作者: vivienluo    时间: 2018-11-7 11:48

作者: davidok    时间: 2019-1-14 08:30
牛人 厉害
作者: 王者和马    时间: 2019-4-12 10:21
总结的比较的全面,不知道对我是否有用。
作者: xh450321    时间: 2020-10-27 09:13
学习了,谢谢分享
作者: chenm01    时间: 2025-1-6 13:36

总结的很好,辛苦了
作者: winskillabc    时间: 2025-1-7 09:46
好文,现在才被推上来..感谢
作者: skill20240614    时间: 2025-3-6 10:22
66666666666666666666666




欢迎光临 Cadence Skill 论坛 (http://www.allegro-skill.com/) Powered by Discuz! X3.4