Ruby 异常


Ruby 异常

异常是程序执行期间的错误情况。当发生异常时,Ruby会通过异常处理机制向上抛出一个异常对象,直到被捕获或程序结束。

异常分类

Ruby内置了很多异常类,分为标准异常和系统异常。标准异常用于表示常见的异常情况,如 ZeroDivisionError、NameError、ArgumentError等。系统异常用于表示Ruby的内部错误,如SystemStackError、NoMemoryError、SignalException等。

异常处理

在Ruby中,我们可以通过 begin..rescue..else..ensure..end 语法块来捕获并处理异常。下面是语法块中各关键字的作用:

  • begin:标志着异常处理的开始
  • rescue:捕获异常并进行处理
  • else:在没有发生异常时执行
  • ensure:始终执行,无论是否发生异常
  • end:标志着异常处理的结束

以下是一个简单的异常处理示例:

begin
  10 / 0
rescue ZeroDivisionError => e
  puts "Exception Class: #{ e.class.name }"
  puts "Exception Message: #{ e.message }"
  puts "Backtrace: #{ e.backtrace }"
end

输出结果:

Exception Class: ZeroDivisionError
Exception Message: divided by 0
Backtrace: ["test.rb:2:in `/'", "test.rb:2:in `<main>'"]

多重异常处理

可以通过多个 rescue 语句来捕获不同类型的异常:

begin
  # some code
rescue ZeroDivisionError
  # handle ZeroDivisionError
rescue TypeError
  # handle TypeError
rescue
  # handle all other types of exception
end

抛出异常

我们也可以手动抛出异常,使用 raise 语句即可:

class MyCustomError < StandardError
end

raise MyCustomError, "My Custom Error Message"

自定义异常类

我们可以通过继承 Ruby 标准库中的 Exception 类来自定义异常类。如下所示:

class MyCustomError < StandardError
  
  def initialize(message = "My Custom Error Message")
    super(message)
  end
  
end

begin
  raise MyCustomError
rescue MyCustomError => e
  puts e.message
end

输出结果:

My Custom Error Message

结论

异常处理是编程语言中的一个重要概念,Ruby提供了便捷的异常处理机制,使我们能够更好地控制程序的行为。在编写 Ruby 代码时,我们应该时刻注意异常处理,特别是在需要进行错误处理或较为复杂的代码块中。