Ruby异常基础 #

一、异常概述 #

异常是Ruby中处理错误的方式。当发生错误时,会抛出异常对象。

二、异常类层次结构 #

text
Exception
├── NoMemoryError
├── ScriptError
│   ├── LoadError
│   ├── NotImplementedError
│   └── SyntaxError
├── SecurityError
├── SignalException
├── StandardError
│   ├── ArgumentError
│   ├── IOError
│   │   ├── EOFError
│   ├── IndexError
│   ├── LocalJumpError
│   ├── NameError
│   │   ├── NoMethodError
│   ├── RangeError
│   │   ├── FloatDomainError
│   ├── RegexpError
│   ├── RuntimeError
│   ├── SystemCallError
│   ├── ThreadError
│   ├── TypeError
│   └── ZeroDivisionError
├── SystemExit
├── SystemStackError
└── fatal

三、常用异常类 #

3.1 StandardError #

ruby
begin
  raise "Something went wrong"
rescue StandardError => e
  puts e.class
  puts e.message
end

3.2 ArgumentError #

ruby
def greet(name)
  puts "Hello, #{name}"
end

begin
  greet
rescue ArgumentError => e
  puts e.message
end

3.3 TypeError #

ruby
begin
  "hello" + 1
rescue TypeError => e
  puts e.message
end

3.4 ZeroDivisionError #

ruby
begin
  1 / 0
rescue ZeroDivisionError => e
  puts e.message
end

3.5 NameError #

ruby
begin
  puts undefined_variable
rescue NameError => e
  puts e.message
end

3.6 NoMethodError #

ruby
begin
  "hello".unknown_method
rescue NoMethodError => e
  puts e.message
end

3.7 IndexError #

ruby
begin
  [1, 2, 3][10]
rescue IndexError => e
  puts e.message
end

3.8 KeyError #

ruby
begin
  { a: 1 }.fetch(:b)
rescue KeyError => e
  puts e.message
end

四、异常对象 #

4.1 创建异常 #

ruby
e = StandardError.new("Something went wrong")
e.message
e.class

4.2 异常方法 #

ruby
begin
  raise "Error occurred"
rescue => e
  puts e.class
  puts e.message
  puts e.backtrace
  puts e.backtrace_locations
end

五、raise #

5.1 基本用法 #

ruby
raise "Something went wrong"
raise StandardError, "Something went wrong"
raise StandardError.new("Something went wrong")

5.2 重新抛出异常 #

ruby
begin
  risky_operation
rescue => e
  log_error(e)
  raise
end

5.3 抛出特定异常 #

ruby
def divide(a, b)
  raise ArgumentError, "b cannot be zero" if b == 0
  a / b.to_f
end

六、总结 #

本章我们学习了:

  1. 异常层次结构:Exception及其子类
  2. 常用异常:StandardError、ArgumentError、TypeError等
  3. 异常对象:创建和方法
  4. raise:抛出异常

接下来让我们学习Ruby的异常捕获!

最后更新:2026-03-27