目录
我们本章继续讲ros,这里主要是讲ros脚本异常处理,以及ros脚本调试方法。
一、ros脚本异常处理
1.1 关于异常处理
我们执行一条语句或多条语句(我这里叫“语句块”)时
- 不确定是否发生错误,当错误发生的时候,希望能得到相关处理。
- 执行的错误信息,我们不想向用户直接显示ros系统的具体错误,而是改为自定义的好友方式。
这时候就要用到catch语句来捕获异常了。
1.2 ros异常语法
ros的异常处理使用do...catch命令,语法如下:
上面的意思是,尝试执行do里面的语句,如果语句或语句块执行过程中发生了错误,那么就转执行 on-error中的语句;如果do中语句没有错误,则会执行完do中语句后,不会执行on-error中的语句,继续执行脚本中下一条命令。
比如我们尝试添加一个ppp用户,用户名user1,密码为123,不存在的配置文件名为user,正常执行情况如下:
发现报错了,这种报错是直接给开发人员自己看的,我们想如果这个语句执行错误,基本上可以判断是配置文件有问题,我们就直接提示配置文件错误或者不存在这样会友好些,修改成如下:
当然如果我们想当指定执行不了,就把配置文件修改为ros默认的配置文件执行,也行,只是把on-error部分修改成如下:就相当于实现中,A方案执行不了的时候就自动启动B方案
二、ros脚本调试
ros脚本调用不像pyton那样可以用专业的ide开发工具的debug调试功能,但ros对脚本的提示还是够友好的,还会提示出大概哪里有问题,如果直接看ros提示看不出东西的话,可以使用如下方式
2.1 使用catch命令调试
当我们怀疑某个语句或语句块有问题,那么我们可以使用catch把认为有问题部分括起来,判断,如
:do {
#怀疑有问题的语句
} on-error { #put命令输出提示 }
2.2 使用输出命令put(推荐)
上面怀疑语句或语句块有问题,需要修改代码,觉得有点麻烦,那么就可以使用put命令,在某条语句前或后,插入put命令来判断,这样就可以知道个范围了
...
:put "xxxl"
/ppp secret add name=user1 password=123 profile=user1 local-address=10.10.10.2
: put "add user ok,the name is user1"
如果最前面到倒数第3个语句没问题,那么倒数第3条语句肯定没有问题。当执行到倒数第2条语句出总问题了,最后一条语句肯定不会被执行,这样就判断倒数第2条语句有问题了
2.3 最小化法
当我们脚本写得很多的时候,眼都花了,排障比较有难度,尤其是业务逻辑错误,并不是语法错误,我们可以把先实现的功能全注解掉,用:put方式输入,如果最小的没有问题,那么再慢慢添加,让它复杂化,这样也能排除。