温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

ruby如何处理异常

发布时间:2026-10-20 15:37:06 来源:亿速云 阅读:88 作者:小樊 栏目:编程语言

在 Ruby 中,异常处理主要通过 begin...rescue...ensure...end 结构来完成。下面从基础到常见用法系统地介绍一下。


一、基本语法

begin
  # 可能出错的代码
  result = 10 / 0
rescue
  # 发生异常时执行
  puts "出错了"
end

二、捕获具体异常类型

Ruby 的异常都继承自 StandardError,推荐只捕获你关心的异常类型。

begin
  File.open("not_exist.txt")
rescue Errno::ENOENT => e
  puts "文件不存在: #{e.message}"
end

常见异常类型:

  • StandardError(大多数异常的父类)
  • ArgumentError
  • NoMethodError
  • RuntimeError
  • IOError
  • ZeroDivisionError

三、获取异常对象

begin
  raise "出错了"
rescue => e
  puts e.class
  puts e.message
  puts e.backtrace
end

四、多个 rescue 分支

begin
  # some code
rescue ZeroDivisionError
  puts "除以零"
rescue IOError => e
  puts "IO 错误: #{e.message}"
rescue => e
  puts "其他错误: #{e.message}"
end

五、ensure(无论是否异常都会执行)

常用于关闭资源、释放连接。

begin
  file = File.open("test.txt")
  # 处理文件
rescue => e
  puts e.message
ensure
  file.close if file
end

六、主动抛出异常

raise "出错了"
raise ArgumentError, "参数不合法"
raise MyCustomError.new("自定义错误")

自定义异常:

class MyError < StandardError; end

raise MyError, "我的错误"

七、retry(重试)

retry_count = 0

begin
  retry_count += 1
  raise "失败" if retry_count < 3
rescue
  retry if retry_count < 3
end

⚠️ retry 要小心死循环。


八、简写形式(方法/代码块)

如果整个方法体都需要异常处理,可以省略 begin:

def foo
  # 可能出错
rescue
  puts "出错"
ensure
  puts "结束"
end

九、begin…rescue 作为表达式

result = begin
  1 / 0
rescue
  0
end

puts result  # 0

十、最佳实践建议

✅ 不要吞掉所有异常
✅ 明确捕获具体异常
✅ 使用 ensure 释放资源
✅ 自定义异常继承 StandardError
❌ 不建议 rescue Exception

# 不推荐
rescue Exception

# 推荐
rescue StandardError

如果你有具体场景(比如 Rails、文件操作、网络请求、重试机制),我可以给你更针对性的示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手