Menu
CoddyTech

多个 rescue 子句

本课属于 Coddy Ruby 学习旅程的“逻辑与流程”单元。第 45 课,共 56 课。

一个 begin 块可以有多个 rescue 子句。Ruby 会从上到下检查它们,并运行第一个异常类匹配的子句。

begin
  number = Integer(gets.chomp)
  result = 100 / number
  puts result
rescue ArgumentError
  puts "That's not a valid number."
rescue ZeroDivisionError
  puts "Can't divide by zero."
end

顺序很重要:先列出具体的类,再列出通用类。如果先放置 StandardError,它就会捕获所有内容,后面的分支永远不会运行。

你还可以在一个分支中通过逗号列出多个异常类来捕获它们:

begin
  risky_call
rescue ArgumentError, TypeError => e
  puts "Bad input: #{e.message}"
end

当多个故障模式使用相同的恢复代码时,使用此方法。

challenge icon

挑战

简单

从输入中读取两行,两行都应为整数。对两行都使用 Integer(...),然后用第一个数除以第二个数。

使用单独的 rescue 分支处理以下三种情况:

  • ArgumentError → 打印 Bad number!
  • ZeroDivisionError → 打印 Cannot divide by zero!
  • TypeError → 打印 Wrong type!

如果一切顺利,打印 Result: <a / b>(整数除法)。

输入 10 / 2 时,输出为 Result: 5。输入 10 / 0 时,输出为 Cannot divide by zero!。输入 10 / abc 时,输出为 Bad number!。

亲手试试

raw_a = gets.chomp
raw_b = gets.chomp

# TODO:begin ... rescue ArgumentError ... rescue ZeroDivisionError ... rescue TypeError ... end
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: Ruby 在线编译器