You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ruby中实现输入值小于指定值时抛出自定义异常

Ruby自定义异常处理实现方案

针对你需要的两种异常场景,我们可以通过定义自定义异常类+分场景抛异常的方式实现,以下是完整的代码和说明:

完整代码示例

# 定义两个自定义异常类,分别对应两种错误场景
class InvalidInputError < StandardError; end
class PriceTooLowError < StandardError; end

begin
  print "请输入价格:"
  input = gets.chomp
  
  # 场景a:输入非整数时抛出自定义异常
  price = Integer(input)
rescue ArgumentError
  raise InvalidInputError, "错误:输入的内容不是整数"
end

begin
  # 场景b:输入整数小于8时抛出自定义异常
  if price < 8
    raise PriceTooLowError, "错误:最低价格至少为8欧元"
  end

  # 无异常时的后续逻辑(可根据需求修改)
  puts "输入的价格#{price}符合要求"
rescue PriceTooLowError => e
  puts e.message
end

或者也可以把所有逻辑放在同一个begin-rescue块中,结构更紧凑:

class InvalidInputError < StandardError; end
class PriceTooLowError < StandardError; end

begin
  print "请输入价格:"
  input = gets.chomp
  price = Integer(input)

  if price < 8
    raise PriceTooLowError, "错误:最低价格至少为8欧元"
  end

  puts "输入的价格#{price}符合要求"
rescue ArgumentError
  raise InvalidInputError, "错误:输入的内容不是整数"
rescue InvalidInputError, PriceTooLowError => e
  puts e.message
end

关键说明

  1. 自定义异常类:
    Ruby中自定义异常必须继承StandardError(而非顶级Exception),这样可以避免误捕获系统级别的严重异常(如内存不足错误),是Ruby异常处理的最佳实践。

  2. 场景a处理:
    Integer(input)方法在输入无法转换为整数时会抛出ArgumentError,我们捕获这个系统异常后,抛出自定义的InvalidInputError并携带自定义错误信息。

  3. 场景b处理:
    整数转换成功后,直接通过条件判断检查价格是否小于8,若满足则主动抛出PriceTooLowError异常。

  4. 异常捕获:
    通过分场景捕获不同的自定义异常,能精准输出对应的错误提示,同时保持代码的可读性。

测试效果

  • 输入非整数(如abc):输出错误:输入的内容不是整数
  • 输入小于8的整数(如7):输出错误:最低价格至少为8欧元
  • 输入8或以上的整数(如10):输出输入的价格10符合要求

内容的提问来源于stack exchange,提问作者Zixxy7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 17:45:49