📜  ruby rase 异常 - Ruby (1)

📅  最后修改于: 2023-12-03 15:19:52.084000             🧑  作者: Mango

Ruby - 异常

在 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 块。

ensure 块

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 块中,我们抛出了自定义异常并捕获了它,并打印出了异常的错误消息。

参考链接