📜  Ruby异常(1)

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

Ruby 异常

在 Ruby 中,异常(Exception)指的是某个事件或条件引起的错误或意外情况。当程序执行过程中出现异常时,程序就会停止执行并抛出异常,就像是一个跳出了函数或语句块的错误。

异常分成两类:标准异常和自定义异常,每个异常都有一个异常类(Exception Class)来表示它。

异常处理

在 Ruby 中,异常处理是通过 begin...rescue...end 结构来完成的。当程序执行到 begin 时,Ruby 会尝试执行 begin 块中的代码,如果出现异常就会跳转到 rescue 块中,并执行 rescue 块中的代码。执行完 rescue 块后,程序会继续执行 end 块中的代码。

begin
  # 可能会引发异常的代码
rescue
  # 处理异常的代码
end

可以使用 rescue 来处理多个不同的异常类型。使用 , 分隔多个异常类型。

begin
  # 可能会引发异常的代码
rescue TypeError, ZeroDivisionError
  # 处理 TypeError 或 ZeroDivisionError 异常的代码
end

rescue 也可以使用 => 来绑定异常对象。在 rescue 后面可以添加变量名来接收异常对象。

begin
  # 可能会引发异常的代码
rescue => e
  # 处理异常的代码
end

可以使用 ensure 关键字来定义必须要执行的代码块。 ensure 关键字后面的代码块不管是否有异常都会被执行。

begin
  # 可能会引发异常的代码
rescue
  # 处理异常的代码
ensure
  # 无论有没有异常都会执行的代码
end
抛出异常

在 Ruby 中,可以使用 raise 来抛出异常。raise 可以接收一个字符串或异常类型作为参数。

raise "错误消息"

如果需要抛出自定义异常,则需要定义一个异常类。自定义异常只需要继承 StandardError 或它的子类即可。

class MyCustomError < StandardError
end

raise MyCustomError, "自定义异常消息"
常见异常类

在 Ruby 中,有很多异常类可供使用,下面列举一些常用的异常类:

  • Exception:所有异常的基类
  • StandardError:大多数异常的基类
  • ArgumentError:调用方法或函数时传递了错误的参数或参数数量不正确
  • IOError:输入输出错误
  • NameError:使用未定义的变量或方法
  • NoMethodError:调用了一个不存在的方法
  • RangeError:指定了超出范围的数字值
  • RegexpError:正则表达式语法错误
  • RuntimeError:Ruby 运行时发生了错误
  • SystemExit:在 exit! 方法中使用,表示立即退出程序
  • SystemStackError:递归调用层数过多导致栈空间不足
  • TypeError:操作的对象类型不正确
  • ZeroDivisionError:除数为 0
参考资料