ruby 抓异常
时间: 2023-09-05 14:10:52 浏览: 58
在 Ruby 中,异常处理的语法结构为 `begin..rescue..end` 或者 `begin..rescue..else..ensure..end`。
在 `begin` 后面的代码块中,我们需要执行可能会抛出异常的代码。如果代码块中有异常抛出,那么就会跳转到 `rescue` 后面的代码块中,进行异常处理。如果没有异常抛出,那么就会跳过 `rescue` 块,执行 `else` 块中的代码,最后执行 `ensure` 块的代码。
下面是一个 `begin..rescue..end` 的例子:
```ruby
begin
x = 1 / 0
rescue ZeroDivisionError => e
puts "Error: #{e.message}"
end
```
上述代码中,我们执行了一个除以零的操作,会抛出 `ZeroDivisionError` 异常。在 `rescue` 块中,我们可以使用 `=>` 符号将异常对象赋值给一个变量,便于对异常进行处理。在这个例子中,我们将异常对象赋值给了变量 `e`,并打印出了异常信息。
下面是一个 `begin..rescue..else..ensure..end` 的例子:
```ruby
begin
file = File.open('data.txt')
data = file.read
rescue Errno::ENOENT => e
puts "Error: #{e.message}"
else
puts "Data: #{data}"
ensure
file.close if file
end
```
上述代码中,我们尝试打开一个名为 `data.txt` 的文件,并读取其中的数据。如果文件不存在,就会抛出 `Errno::ENOENT` 异常,在 `rescue` 块中进行异常处理。如果文件存在,就会执行 `else` 块中的代码,并输出文件中的数据。最后,无论有没有异常抛出,都会执行 `ensure` 块中的代码,关闭文件。