Ruby的异常处理

Ruby在处理0.1+0.2是会出现精度问题:

  许多语言都有类似问题,详见网址:http://0.30000000000000004.com/

Ruby的异常处理

如果异常处理范围是整个方法体,可以省略begin和end,直接写rescure和ensure部分的程序,不过要写在最后,避免后面的方法体内容被跳过。

def foo
    方法体
rescure => ex
    异常处理
ensure
    后处理
end

范例:

 
  
begin
input = File.open("liuyang.txt")
input.each do |line|
printf("%s,%d", line, line.size)
end
input.close
a =1
printf("\n%d\n", a)
rescue => ex
puts "**************"
puts ex.message #message : 异常信息
puts ex.backtrace #backtrace / $@ : 异常的位置信息
sleep(3)
retry #使用retry后,begin一下的处理会再重新做一遍
ensure
puts "no matter what happened , execute" #不管是否发生异常,这需要执行
end
 

 

转载于:https://www.cnblogs.com/liuyang92/p/5894701.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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` 块中的代码,关闭文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值