Ruby 异常学习笔记

什么是异常?

在 Ruby 中,异常(Exception)是一种流程控制结构,它用于处理程序中的错误或不正常情况。当遇到异常时,程序将会跳转到异常处理器中进行处理。

如何抛出异常?

在 Ruby 中,可以通过 raise 语句来手动抛出异常。raise 语句后面可以跟异常类名或者异常对象。

以下是抛出一个 RuntimeError 类型的异常的例子:

rubyCopy Code
raise 'Something went wrong'

如果你希望抛出自定义异常,可以自定义一个异常类,如下所示:

rubyCopy Code
class MyCustomException < StandardError end raise MyCustomException.new('Something went wrong')

如何处理异常?

在 Ruby 中,可以使用 begin...rescue...end 语句块来捕获异常并进行处理。以下是一个简单的例子:

rubyCopy Code
begin # some code that might raise an exception rescue => e # handle the exception puts "Exception: #{e.message}" end

在这个例子中,如果在 begin 块中的代码抛出了异常,则会跳转到 rescue 块中进行处理。在 rescue 块中,我们可以通过变量 e 来访问异常信息。

常见的 Ruby 内置异常类

以下是 Ruby 中常见的内置异常类:

  • StandardError
  • RuntimeError
  • ArgumentError
  • NameError
  • NoMethodError
  • TypeError

实例

以下是一个简单的例子,演示了如何使用异常处理:

rubyCopy Code
def divide(x, y) raise ArgumentError.new('Invalid argument') if y == 0 x / y rescue => e puts "Exception: #{e.message}" end puts divide(10, 0) puts divide(10, 2)

在这个例子中,我们定义了一个名为 divide 的函数,它接收两个参数。如果第二个参数为 0,则会抛出一个 ArgumentError 类型的异常。

在主程序中,我们分别调用 divide 函数两次。第一次调用时,我们传入了 0 作为第二个参数,这将会抛出一个异常。第二次调用时,我们传入了 2 作为第二个参数,这将会返回 5。

输出结果如下:

Copy Code
Exception: Invalid argument 5