目录

​一、ros脚本异常处理​

​1.1 关于异常处理​

​1.2 ros异常语法​

​二、ros脚本调试​

​2.1 使用catch命令调试​

​2.2 使用输出命令put(推荐)​

​2.3 最小化法​


我们本章继续讲ros,这里主要是讲​​ros脚本异常处理​​,以及ros脚本调试方法。

一、ros脚本异常处理

1.1 关于异常处理

我们执行一条语句或多条语句(我这里叫“语句块”)时

  • 不确定是否发生错误,当错误发生的时候,希望能得到相关处理。
  • 执行的错误信息,我们不想向用户直接显示ros系统的具体错误,而是改为自定义的好友方式。

这时候就要用到catch语句来捕获异常了。

1.2 ros异常语法

ros的异常处理使用do...catch命令,语法如下:

:do {
语句
} on-error={ 语句};

上面的意思是,尝试执行do里面的语句,如果语句或语句块执行过程中发生了错误,那么就转执行 on-error中的语句;如果do中语句没有错误,则会执行完do中语句后,不会执行on-error中的语句,继续执行脚本中下一条命令。

比如我们尝试添加一个ppp用户,用户名user1,密码为123,不存在的配置文件名为user,正常执行情况如下:

# 指定了一个不存在的配置文件,发现报错了
[hua@MikroTik] > ppp secret add name=user1 password=123 profile=user local-address=10.10.10.2
input does not match any value of profile

发现报错了,这种报错是直接给开发人员自己看的,我们想如果这个语句执行错误,基本上可以判断是配置文件有问题,我们就直接提示配置文件错误或者不存在这样会友好些,修改成如下:

# 改用指定的方式提示
[hua@MikroTik] > :do { /ppp secret add name=user1 password=123 profile=user1 local-address=10.10.10.2 \
{\... } on-error={ :put "profile error or exsit"};
profile error or exsit

当然如果我们想当指定执行不了,就把配置文件修改为ros默认的配置文件执行,也行,只是把on-error部分修改成如下:就相当于实现中,A方案执行不了的时候就自动启动B方案

:do { /ppp secret add name=user1 password=123 profile=pppoe1 local-address=10.10.10.2 \
} on-error={ /ppp secret add name=user1 password=123 profile=default local-address=10.10.10.2 };

二、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方式输入,如果最小的没有问题,那么再慢慢添加,让它复杂化,这样也能排除。