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
六、总结 #
本章我们学习了:
- 异常层次结构:Exception及其子类
- 常用异常:StandardError、ArgumentError、TypeError等
- 异常对象:创建和方法
- raise:抛出异常
接下来让我们学习Ruby的异常捕获!
最后更新:2026-03-27