创建自定义异常类型

自定义异常是任何扩展 ExceptionException 子类的类。

一般来说,你应该总是延长 StandardError 或后代。Exception 系列通常用于虚拟机或系统错误,抢救它们可以防止强制中断按预期工作。

# Defines a new custom exception called FileNotFound
class FileNotFound < StandardError
end

def read_file(path)
  File.exist?(path) || raise(FileNotFound, "File #{path} not found")
  File.read(path)
end

read_file("missing.txt")  #=> raises FileNotFound.new("File `missing.txt` not found")
read_file("valid.txt")    #=> reads and returns the content of the file

通过在末尾添加 Error 后缀来命名异常是很常见的:

  • ConnectionError
  • DontPanicError

但是,当错误不言自明时,你不需要添加 Error 后缀,因为这将是多余的:

  • FileNotFound vs FileNotFoundError
  • DatabaseExploded vs DatabaseExplodedError