异常的基本结构:
begin
# 可能会引发异常的代码
rescue SomeException => e
# 处理特定类型的异常
puts "Caught an exception: #{e.message}"
rescue AnotherException => e
# 处理另一种类型的异常
puts "Caught another exception: #{e.message}"
else
# 如果没有异常发生时执行的代码块
ensure
# 无论是否发生异常,都会执行的代码块
end
抛出异常:
def divide(x, y)
raise ArgumentError, "Cannot divide by zero" if y.zero?
x / y
end
begin
result = divide(10, 0)
puts result
rescue ArgumentError => e
puts "Error: #{e.message}"
end
自定义异常类:
class MyCustomError < StandardError
end
def my_method
raise MyCustomError, "This is a custom error"
end
begin
my_method
rescue MyCustomError => e
puts "Caught custom error: #{e.message}"
end
使用 ensure 确保资源释放:
file = nil
begin
file = File.open("example.txt", "r")
# 进行文件操作
rescue StandardError => e
puts "Error: #{e.message}"
ensure
# 确保文件关闭,即使发生异常
file&.close
end
Exception 类层次结构:
Ruby的异常类是层次结构的,Exception 是所有异常类的父类。在处理异常时,可以选择捕获更具体的异常类,也可以选择捕获通用的 StandardError 类。
转载请注明出处:http://www.zyzy.cn/article/detail/6464/Ruby