Ruby:
处理错误

怎么做:

Ruby 使用 beginrescueensureend 来处理错误。你把可能出风险的代码放在 beginend 之间。如果出现错误,rescue 就会介入。

begin
  # 危险代码放在此处。
  puts 10 / 0
rescue ZeroDivisionError => e
  puts "哎呀!你不能那样做:#{e.message}"
ensure
  puts "无论是否发生错误,这总会运行。"
end

示例输出:

哎呀!你不能那样做:除以0
无论是否发生错误,这总会运行。

深入了解

在程序语言史上,错误处理有了显著的进化,早期的语言往往具有粗糙或不存在的机制。Ruby 的异常处理受到像 Python 和 Smalltalk 这样的语言的启发。

Ruby 中 begin-rescue 的替代方法包括在方法定义中使用 rescue 或使用 throwcatch 进行非标准流控制,尽管它们不用于典型的错误处理。

一个有趣的细节:Ruby 的异常是对象(Exception 类及其后代的实例),所以你可以定义自定义错误类并做更多事情 —— 你可以在程序中传递丰富的状态,以实现更健壮的错误处理。

另请参阅

  • Ruby 文档中关于异常和错误处理的部分:ruby-doc.org
  • 关于 Ruby 错误处理最佳实践的详细指南:thoughtbot.com