如何在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
关键说明
自定义异常类:
Ruby中自定义异常必须继承StandardError(而非顶级Exception),这样可以避免误捕获系统级别的严重异常(如内存不足错误),是Ruby异常处理的最佳实践。场景a处理:
Integer(input)方法在输入无法转换为整数时会抛出ArgumentError,我们捕获这个系统异常后,抛出自定义的InvalidInputError并携带自定义错误信息。场景b处理:
整数转换成功后,直接通过条件判断检查价格是否小于8,若满足则主动抛出PriceTooLowError异常。异常捕获:
通过分场景捕获不同的自定义异常,能精准输出对应的错误提示,同时保持代码的可读性。
测试效果
- 输入非整数(如
abc):输出错误:输入的内容不是整数 - 输入小于8的整数(如
7):输出错误:最低价格至少为8欧元 - 输入8或以上的整数(如
10):输出输入的价格10符合要求
内容的提问来源于stack exchange,提问作者Zixxy7
相关产品推荐
相关产品推荐

