向(自定义)例外添加信息

包含具有异常的附加信息可能会有所帮助,例如用于记录目的或在捕获异常时允许条件处理:

class CustomError < StandardError
  attr_reader :safe_to_retry

  def initialize(safe_to_retry = false, message = 'Something went wrong')
    @safe_to_retry = safe_to_retry
    super(message)
  end
end

提出例外:

raise CustomError.new(true)

捕获异常并访问提供的其他信息:

begin
  # do stuff
rescue CustomError => e
  retry if e.safe_to_retry
end