当 Ruby 代码出现错误时,会抛出一个 Exception。 在 Ruby 中,异常处理使用一个 begin/rescue/ensure/end 的异常块结构来完成,其中 rescue 子句负责捕获异常并进行处理。
示例1:rescue 捕获单个异常类
当我们尝试打开一个不存在的文件时,Ruby 会抛出 Errno::ENOENT
异常。我们可以使用 rescue
关键字来捕获这个异常并进行处理,如下所示:
begin
File.open('/path/to/nonexistent/file')
rescue Errno::ENOENT => e
puts "File not found: #{e.message}"
end
在上述代码中,我们通过 begin
和 end
块来封装可能抛出异常的代码。rescue
子句后跟异常类的名称,此处我们指定了 Errno::ENOENT
,即“没有这样的文件或目录”。 当代码块中发生该类型的异常时,Ruby 会跳转到此块并执行 rescue
子句中的代码。
示例2:捕获其它异常类
除了捕获特定异常类以外,还可以使用 rescue
捕获所有异常类:
begin
# ...
rescue StandardError => e
puts "An error occurred: #{e.message}"
end
在上述代码中,我们指定了 StandardError
异常,这个异常是大多数异常类的超类,它包含本地系统错误(如文件访问错误)以及 Ruby 异常(如 ZeroDivisionError
)。 此处我们可以使用 $!
来访问异常对象。
还可以不指定任何异常类来捕获所有异常:
begin
# ...
rescue => e
puts "An error occurred: #{e.message}"
end
这种方式会抓住所有异常,包括 SystemExit
和 SignalException
,适合处理所有非正常退出的情况。
以上就是 Ruby 异常处理: rescue 的完整攻略,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ruby 异常处理:rescue - Python技术站