📅  最后修改于: 2023-12-03 15:19:52.084000             🧑  作者: Mango
在 Ruby 中,异常是被抛出的错误对象。当程序遇到一个错误条件时,它会抛出一个异常并中止当前执行流程。
在 Ruby 中,可以使用 raise
关键字来抛出一个异常。raise
可以接受一个异常对象或者一个异常类作为参数。
raise "出现了一个错误"
raise ArgumentError, "参数错误"
捕获异常可以让我们在程序出现错误时继续执行其他的代码。在 Ruby 中,可以使用 begin/rescue/end
块来捕获异常。以下是一个基本的例子:
begin
# 产生异常的代码
rescue
# 处理异常的代码
end
上面的代码中,当执行 begin
块中的代码抛出异常时,会立即跳转到 rescue
块中处理异常。
在 rescue
中,可以访问异常对象,如下所示:
begin
# 产生异常的代码
rescue => e
puts e.message
end
上面的代码中,我们可以使用 e.message
来访问异常的错误消息。
在 rescue
中可以处理多个异常。以下是一个处理多个异常的示例:
begin
# 产生异常的代码
rescue ArgumentError
# 参数异常的处理代码
rescue StandardError
# 其他异常的处理代码
end
上面的代码中,当产生 ArgumentError
异常时,会执行第一个 rescue
块,当产生除了 ArgumentError
之外的异常时,会执行第二个 rescue
块。
在 begin/rescue
块中,还可以使用 ensure
块来执行无论如何都需要执行的代码,无论是否产生异常。
begin
# 产生异常的代码
rescue
# 处理异常的代码
ensure
# 无论如何都会执行的代码
end
在 Ruby 中,我们可以自定义异常类,让我们的程序有更好的可读性。以下是一个自定义异常类的例子:
class MyException < StandardError
def initialize(msg)
super("My Exception: #{msg}")
end
end
begin
raise MyException.new("异常信息")
rescue => e
puts e.message
end
上面的代码中,我们自定义了一个 MyException
异常类,它继承自 StandardError
。在 initialize
方法中,我们为异常对象设置了一个带有自定义信息的错误消息。在 begin/rescue
块中,我们抛出了自定义异常并捕获了它,并打印出了异常的错误消息。