📜  Ruby-异常(1)

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

Ruby 异常

在编程中,错误和异常是不可避免的。Ruby 中的异常是指程序在执行时遇到的错误或不正常情况,导致程序无法继续执行。Ruby 异常处理机制提供了一种可以让程序处理异常的方法,从而使程序更加健壮并且易于调试。

抛出异常

在 Ruby 中抛出异常,可以使用 raise 关键字。例如:

raise 'error occurred'

以上代码会抛出一个带有 'error occurred' 文本信息的异常。我们也可以指定异常的类型,如:

raise ArgumentError, 'invalid argument'

以上代码会抛出一个 ArgumentError 类型的异常,带有 'invalid argument' 文本信息。如果想要在异常抛出时同时返回一些数据,可以使用 throw 语句。例如:

def divide(x, y)
  throw :error, 'divided by zero' if y == 0
  x / y
end

catch :error do
  puts divide(1, 2)
  puts divide(1, 0) # 触发异常
end

以上代码会在 y 的值为 0 时触发异常,并且返回 'divided by zero' 的文本信息。catch 语句用于捕捉异常,如果有异常抛出,程序就会跳转到 catch 语句处。

处理异常

在 Ruby 中,处理异常可以使用 rescue 关键字。

begin
  # 代码块
rescue
  # 异常处理块
end

当代码块抛出异常时,会跳转到 rescue 块并执行异常处理。你也可以指定捕捉特定类型的异常,如:

begin
  # 代码块
rescue ArgumentError
  # 处理 ArgumentError 类型的异常
rescue ZeroDivisionError
  # 处理 ZeroDivisionError 类型的异常
rescue
  # 处理其他类型的异常
end

处理块中可以包含任意合法的 Ruby 代码,例如输出错误信息、重新抛出异常等。

begin
  # 代码块
rescue ArgumentError => e
  puts e.message # 输出异常信息
  raise # 重新抛出异常
rescue Exception => e
  puts "An error occurred: #{e.message}"
end
ensure 块

在异常处理中,有时需要让某些代码无论是否抛出异常都会执行,可以使用 ensure 块。例如:

begin
  # 代码块
rescue
  # 异常处理块
ensure
  # 无论是否抛出异常都会执行的代码
end
总结

异常处理是程序设计中必不可少的一部分。Ruby 的异常处理机制提供了轻松处理异常和对异常进行监视的方式,帮助我们写出更加健壮和可靠的 Ruby 程序。