Ruby 教程 之 Ruby 异常 9
Ruby 异常
异常和执行总是被联系在一起。如果您打开一个不存在的文件,且没有恰当地处理这种情况,那么您的程序则被认为是低质量的。
类 Exception
Ruby 的标准类和模块抛出异常。所有的异常类组成一个层次,包括顶部的 Exception 类在内。下一层是七种不同的类型:
Interrupt
NoMemoryError
SignalException
ScriptError
StandardError
SystemExit
Fatal 是该层中另一种异常,但是 Ruby 解释器只在内部使用它。
ScriptError 和 StandardError 都有一些子类,但是在这里我们不需要了解这些细节。最重要的事情是创建我们自己的异常类,它们必须是类 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 的一个新的实例,由于特定的异常引起数据写入失败。