推荐答案
// www.javascriptcn.com code example
begin
# 可能会抛出异常的代码
risky_code
rescue SomeError => e
# 处理 SomeError 异常
puts "Caught an error: #{e.message}"
else
# 如果没有异常发生,执行此代码块
puts "No errors occurred!"
ensure
# 无论是否有异常,都会执行此代码块
puts "This will always run."
end本题详细解读
begin-rescue-else-ensure 语句的结构
begin-rescue-else-ensure 是 Ruby 中用于异常处理的一种结构。它的基本结构如下:
// www.javascriptcn.com code example begin # 可能会抛出异常的代码 rescue SomeError => e # 处理特定类型的异常 else # 如果没有异常发生,执行此代码块 ensure # 无论是否有异常,都会执行此代码块 end
begin 块
begin 块包含可能会抛出异常的代码。如果代码执行过程中发生异常,程序会立即跳转到 rescue 块。
rescue 块
rescue 块用于捕获并处理异常。你可以指定要捕获的异常类型,例如 SomeError。捕获的异常对象可以通过 => e 赋值给变量 e,以便在块内使用。
else 块
else 块是可选的,只有在 begin 块中的代码没有抛出任何异常时才会执行。它通常用于处理没有异常发生时的逻辑。
ensure 块
ensure 块也是可选的,但无论 begin 块中的代码是否抛出异常,ensure 块中的代码都会执行。它通常用于释放资源或执行清理操作。
示例代码解析
// www.javascriptcn.com code example
begin
risky_code
rescue SomeError => e
puts "Caught an error: #{e.message}"
else
puts "No errors occurred!"
ensure
puts "This will always run."
end- 如果
risky_code抛出SomeError异常,程序会执行rescue块,输出Caught an error: ...。 - 如果
risky_code没有抛出异常,程序会执行else块,输出No errors occurred!。 - 无论是否抛出异常,
ensure块都会执行,输出This will always run.。