Ruby Exception类

Ruby 的标准类和模块抛出异常。所有的异常类组成一个层次,包括顶部的 Exception 类在内。下一层是七种不同的类型:

  • Interrupt
  • NoMemoryError
  • SignalException
  • ScriptError
  • StandardError
  • SystemExit

Fatal 是该层中另一种异常,但是 Ruby 解释器只在内部使用它。

ScriptError 和 StandardError 都有一些子类。最重要的事情是创建我们自己的异常类,它们必须是类 Exception 或其子代的子类。

案例

Exception类使用

Exception 类使用

class FileSaveError < StandardError attr_reader :reason def initialize(reason) @reason = reason end end

现在,看下面的实例,将用到上面的异常:

File.open(path, "w") do |file| begin # 写出数据 ... rescue # 发生错误 raise FileSaveError.new($!) end end

在这里,最重要的一行是 raise FileSaveError.new($!)。我们调用 raise 来示意异常已经发生,把它传给 FileSaveError 的一个新的实例,由于特定的异常引起数据写入失败。

Ruby Exception类总结

我们创建自己的异常类,它们必须是类 Exception 或其子代的子类。