ruby异常处理

一、常见ruby异常信息:

异常名

常见原因

怎样抛出

RuntimeError

raise抛出的默认异常

raise

NoMethodError

对象找不到对应的方法

a=Oject.new
a.jackmethod

NameError

解释器碰到一个不能解析为变量或方法名的标识符

a=jack

IOError

读关闭的流,写只读的流,或类似的操作

STDIN.puts("不能写入")

Errno::error

与文件IO相关的一类错误

File.open(-10)

TypeError

方法接受到它不能处理的参数

a=3+"abc"

ArgumentError

传递参数的数目出错

def o(x) end  o(1,2,3)

 

二、格式

参照java的异常处理。

try{  -------------- begin

}catch(){  ---------rescue
 
}finally{  ---------ensure

}   ----------------end


可能会出现的异常信息包含在begin、end之间。

指定异常跟在rescue之后,当然可以缺省使用默认。rescue和else配对使用,else就是不是指定异常或者是没有异常。

ensure等同于java中的finally,不多做解释。

两个重要变量:$!:异常的描述信息、$@:异常出现的位置。

看个例子:

if __FILE__ == $0
  
  a = 10
  b = 20 
  c = 0
 begin
   
  ad=a/b
  ac=a/c

  rescue 
   puts "有异常  #{$!}, 位置:#{$@}"
  else
   puts "没有异常"
  ensure
   puts "进入类finally区" 
 end
end

执行结果:
有异常  divided by 0, 位置:exception.rb:15:in `/'exception.rb:15
进入类finally区

三、异常信息保存到变量

使用:rescue => e

打印:puts  e.to_s
借用上面的例子,rescue替换成如下:

  rescue => e
   puts "有异常  #{$!}, 位置:#{$@}"
   puts e.to_s+"....."

执行结果:

有异常  divided by 0, 位置:exception.rb:15:in `/'exception.rb:15
divided by 0.....
进入类finally区

 


 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值