begin
num = 0
de = 0
value = num/de
rescue ZeroDivisionError => ex
puts "error,divede zero" # error,divede zero
puts ex # divided by 0
puts ex.class # ZeroDivisionError
puts ex.class.superclass # StandardError
puts ex.class.superclass.superclass # Exception
puts ex.class.superclass.superclass.superclass # Object
ensure
puts "over" # over
end
在异常产生后,如果相应的rescue语句被匹配到,那么这个异常对象会被复制到ex中,而ensure后的代码永远都会被执行到。
ruby里,异常类的基类是Exception。
recuse不加参数默认是匹配StandardError类型的异常。
当抛出一个异常时,可以使用Ruby内置的异常类,也可以自定义自己的异常类。如果使用自定义的异常类,那么这个异常类应该是StandardError类直接或间接的子类。如果不这么做,那么默认情况下,这个异常不能正确地被捕捉。