异常处理的写法

Python016

异常处理的写法,第1张

ruby中使用 begin rescue end 语句描述异常处理

在ruby中,异常及其相关信息都是被作为对象来处理的,在 rescue 后面制定变量名,可以获得异常对象。

即使不指定变量名,ruby也会把异常对象赋值给变量 $!

不过把变量名明确写出来会使程序更加易懂。

异常对象的方法

如果发生异常的方法中没有rescue处理,程序会逆向查找调用者中是否定义了异常处理。

不管是否发生异常都希望执行的处理,在ruby中可以用ensure关键字来定义。

在 rescue 中使用 retry 后, begin 以下的处理会再做一遍。

retry 会隔一段时间后再执行一次,如果该处一直是异常,那么程序就会陷入死循环。

rescue 修饰符

异常处理方法的补充

如果异常处理的范围是整个方法体,也就是说整个方法内的程序都用 begin end 包含的话,我们就可以省略begin以及end,直接书写rescue和ensure部分的程序。

当存在多个种类的异常,且需要按异常的种类分别进行处理时,我们可以用多个rescue来分开处理。

使用raise方法,可以使程序主动抛出异常。在基于自己判定的条件抛出异常,或者把刚捕获到的异常再次抛出并通知异常的调用者等情况下,我们会使用raise方法。

raise方法有以下4中调用方式:

file = File.new(“testfile”, “r”)# … process the filefile.closetestfile是想要操作的文件名,”r”说明了文件的操作模式为读取。可以使用”w”表示写入,”rw”表示读写。最后要记得关闭打开的文件,确保所有被缓冲的数据被写入文件,所有相关的资源被释放。也可以使用File.open来打开文件,open和new的不同是open可以使用其后的代码块而new方法则返回一个File类的实例。File.open(“testfile”, “r”) do |file|# … process the fileendopen操作的另一个优点是处理了异常,如果处理一个文件发生错误抛出了异常的话,那么open操作会自动关闭这个文件,下面是open操作的大致实现:class Filedef File.open(*args)result = f = File.new(*args)if block_given?beginresult = yield fensuref.closeendendreturn resultendend对于文件的路径,Ruby会在不同的操作系统间作转换。例如,在Windows下,/ruby/sample/test.rb会被转化为\ruby\sample\test.rb。当你使用字符串表示一个Windows下的文件时,请记住使用反斜线先转义: