在Ruby中,可以使用 begin...rescue...else...end 块来处理异常。其中,begin 后面的语句是需要被监控的代码块,rescue 后面的语句是用来处理异常的代码块。如果监控的代码块出现异常,则会跳转到 rescue 块中执行相关代码。如果没有异常,则会执行 else 块中的代码。
以下是一个简单的异常处理示例:
begin
# 可能会抛出异常的代码
result = 10 / 0
rescue ZeroDivisionError => e
# 处理 ZeroDivisionError 异常
puts "Error: #{e.message}"
else
# 如果没有异常,则执行这里的代码
puts "Result: #{result}"
end
在上面的代码中,由于除数为零,会抛出 ZeroDivisionError 异常。程序会跳转到 rescue 块中,输出异常信息。最后,程序执行完 rescue 块后,会跳转到 else 块中,输出结果。
在实际应用中,可以根据需要捕获不同类型的异常,并进行相应的处理。还可以使用 ensure 块来执行一些必须执行的代码,例如关闭文件或数据库连接等。
begin
# 可能会抛出异常的代码
file = File.open("test.txt", "r")
content = file.read
rescue Errno::ENOENT => e
# 处理文件不存在异常
puts "Error: #{e.message}"
rescue Exception => e
# 处理其他异常
puts "Error: #{e.message}"
ensure
# 必须执行的代码,关闭文件
file.close if file
end
在上面的代码中,如果文件不存在会抛出 Errno::ENOENT 异常。程序会跳转到第一个 rescue 块中,输出异常信息。如果抛出其他异常,则会跳转到第二个 rescue 块中,输出异常信息。最后,程序执行完 rescue 块后,会跳转到 ensure 块中,关闭文件。