📅  最后修改于: 2023-12-03 15:34:46.308000             🧑  作者: Mango
在 Ruby 中,异常(Exception)指的是某个事件或条件引起的错误或意外情况。当程序执行过程中出现异常时,程序就会停止执行并抛出异常,就像是一个跳出了函数或语句块的错误。
异常分成两类:标准异常和自定义异常,每个异常都有一个异常类(Exception Class)来表示它。
在 Ruby 中,异常处理是通过 begin...rescue...end
结构来完成的。当程序执行到 begin
时,Ruby 会尝试执行 begin
块中的代码,如果出现异常就会跳转到 rescue
块中,并执行 rescue
块中的代码。执行完 rescue
块后,程序会继续执行 end
块中的代码。
begin
# 可能会引发异常的代码
rescue
# 处理异常的代码
end
可以使用 rescue
来处理多个不同的异常类型。使用 ,
分隔多个异常类型。
begin
# 可能会引发异常的代码
rescue TypeError, ZeroDivisionError
# 处理 TypeError 或 ZeroDivisionError 异常的代码
end
rescue
也可以使用 =>
来绑定异常对象。在 rescue
后面可以添加变量名来接收异常对象。
begin
# 可能会引发异常的代码
rescue => e
# 处理异常的代码
end
可以使用 ensure
关键字来定义必须要执行的代码块。 ensure
关键字后面的代码块不管是否有异常都会被执行。
begin
# 可能会引发异常的代码
rescue
# 处理异常的代码
ensure
# 无论有没有异常都会执行的代码
end
在 Ruby 中,可以使用 raise
来抛出异常。raise
可以接收一个字符串或异常类型作为参数。
raise "错误消息"
如果需要抛出自定义异常,则需要定义一个异常类。自定义异常只需要继承 StandardError
或它的子类即可。
class MyCustomError < StandardError
end
raise MyCustomError, "自定义异常消息"
在 Ruby 中,有很多异常类可供使用,下面列举一些常用的异常类:
Exception
:所有异常的基类StandardError
:大多数异常的基类ArgumentError
:调用方法或函数时传递了错误的参数或参数数量不正确IOError
:输入输出错误NameError
:使用未定义的变量或方法NoMethodError
:调用了一个不存在的方法RangeError
:指定了超出范围的数字值RegexpError
:正则表达式语法错误RuntimeError
:Ruby 运行时发生了错误SystemExit
:在 exit!
方法中使用,表示立即退出程序SystemStackError
:递归调用层数过多导致栈空间不足TypeError
:操作的对象类型不正确ZeroDivisionError
:除数为 0