多个 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当多个故障模式使用相同的恢复代码时,使用此方法。
挑战
简单从输入中读取两行,两行都应为整数。对两行都使用 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
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: Ruby 在线编译器