转自: http://hi.baidu.com/xiaoxiaolq/blog/item/66c78d16a64d295bf2de32fa.html 在java中,异常的捕捉是在try ... catch当中进行,而ruby则是在begin ... end代码块中进行异常的捕捉,在该代码块中使用rescue关键字进行捕捉异常类型,注意哦,这个是关键字,而不是方法。 Ruby代码 begin ...... #可能出现异常的代码 rescue errorType1 #要捕捉的异常类型 ...... #处理异常的代码 rescue errorType2 #要捕捉的异常类型 ...... #处理异常的代码 end 以上代码就是一个大概的捕捉异常的例子,在begin和end代码块中通过rescue进行异常类型的捕捉然后进行适当的处理,可是如果抛出的异常类型并没有显示的捕捉如何处理呢?那就是在最后使用else,如下: Ruby代码 begin ...... #可能出现异常的代码 rescue errorType1 #要捕捉的异常类型 ...... #处理异常的代码 rescue errorType2 #要捕捉的异常类型 ...... #处理异常的代码 else ...... #如果以上代码类型都没有捕捉到,则运行该段代码 end begin ...... #可能出现异常的代码 rescue errorType1 #要捕捉的异常类型 ...... #处理异常的代码 rescue errorType2 #要捕捉的异常类型 ...... #处理异常的代码 else ...... #如果以上代码类型都没有捕捉到,则运行该段代码 end 这时又有一个问题,如果我想获取异常信息又该如何做呢?请看下面的代码: Ruby代码 begin raise ArgumentError, "Bad data" rescue => err puts err end 通过rescue => variable的方式,就可以将异常保存为一个variable了。又解决了一个问题,还有什么问题呢?啊,对了,在java的使用当中,比如使用 Connection进行数据库连接后,最后一定要进行资源的清理,都是在finally块当中进行的,可是在ruby中又如何进行这些资源的清理呢?看看下面的代码: Ruby代码 begin raise ArgumentError, "Bad data" rescue => err puts err ensure ... #执行清理工作 end 从上面代码我们看到,ruby提供了一个关键字ensure,它的作用和java中的finally一样,无论任何异常,该关键字下的代码都必然会在退出代码块前执行。同时,ruby还提供恢复功能,如果在抛出异常并进行异常处理后我们需要进行恢复工作,那就是使用retry就会重新执行代码块了。 上面提到,异常的捕捉处理必须在begin-end代码块中进行,那是不是无论什么时候都要书写begin-end这两个关键字呢?其实也不是,在 ruby中,方法实际上就是一个隐式的begin-end代码块,所以在方法中进行异常的捕捉和处理,可以省略begin。
Ruby 异常处理
最新推荐文章于 2022-05-11 16:11:18 发布