Ruby 异常
Ruby 异常
异常是程序执行期间的错误情况。当发生异常时,Ruby会通过异常处理机制向上抛出一个异常对象,直到被捕获或程序结束。
异常分类
Ruby内置了很多异常类,分为标准异常和系统异常。标准异常用于表示常见的异常情况,如 ZeroDivisionError、NameError、ArgumentError等。系统异常用于表示Ruby的内部错误,如SystemStackError、NoMemoryError、SignalException等。
异常处理
在Ruby中,我们可以通过 begin..rescue..else..ensure..end 语法块来捕获并处理异常。下面是语法块中各关键字的作用:
- begin:标志着异常处理的开始
- rescue:捕获异常并进行处理
- else:在没有发生异常时执行
- ensure:始终执行,无论是否发生异常
- end:标志着异常处理的结束
以下是一个简单的异常处理示例:
begin
10 / 0
rescue ZeroDivisionError => e
puts "Exception Class: #{ e.class.name }"
puts "Exception Message: #{ e.message }"
puts "Backtrace: #{ e.backtrace }"
end
输出结果:
Exception Class: ZeroDivisionError
Exception Message: divided by 0
Backtrace: ["test.rb:2:in `/'", "test.rb:2:in `<main>'"]
多重异常处理
可以通过多个 rescue 语句来捕获不同类型的异常:
begin
# some code
rescue ZeroDivisionError
# handle ZeroDivisionError
rescue TypeError
# handle TypeError
rescue
# handle all other types of exception
end
抛出异常
我们也可以手动抛出异常,使用 raise 语句即可:
class MyCustomError < StandardError
end
raise MyCustomError, "My Custom Error Message"
自定义异常类
我们可以通过继承 Ruby 标准库中的 Exception 类来自定义异常类。如下所示:
class MyCustomError < StandardError
def initialize(message = "My Custom Error Message")
super(message)
end
end
begin
raise MyCustomError
rescue MyCustomError => e
puts e.message
end
输出结果:
My Custom Error Message
结论
异常处理是编程语言中的一个重要概念,Ruby提供了便捷的异常处理机制,使我们能够更好地控制程序的行为。在编写 Ruby 代码时,我们应该时刻注意异常处理,特别是在需要进行错误处理或较为复杂的代码块中。