Ruby之旅(16) 异常处理 rescue与ensurebegin #开始
Ruby之旅(16) 异常处理 rescue与ensure
 Ruby之旅(16) 异常处理 rescue与ensure
Ruby之旅(16) 异常处理 rescue与ensure 
raise.. #抛出异常
Ruby之旅(16) 异常处理 rescue与ensure
 Ruby之旅(16) 异常处理 rescue与ensure
Ruby之旅(16) 异常处理 rescue与ensurerescue [ExceptionType = StandardException] 
#捕获指定类型的异常 缺省值是StandardException
Ruby之旅(16) 异常处理 rescue与ensure
 $! #表示异常信息
Ruby之旅(16) 异常处理 rescue与ensure
 $@ #表示异常出现的代码位置
Ruby之旅(16) 异常处理 rescue与ensure
else #其余异常
Ruby之旅(16) 异常处理 rescue与ensure
 ..
Ruby之旅(16) 异常处理 rescue与ensureensure 
#不管有没有异常,进入该代码块
Ruby之旅(16) 异常处理 rescue与ensure
 Ruby之旅(16) 异常处理 rescue与ensure
Ruby之旅(16) 异常处理 rescue与ensureend 
#结束


这是异常处理结构,可以结合$!错误原因,和$@错误位置做一个错误捕获并提示的小程序了,比如

Ruby之旅(16) 异常处理 rescue与ensurebegin
Ruby之旅(16) 异常处理 rescue与ensure    puts 
Ruby之旅(16) 异常处理 rescue与ensure    puts 
"file: #{name = ARGV.shift}"
Ruby之旅(16) 异常处理 rescue与ensure    file 
= open(name)
Ruby之旅(16) 异常处理 rescue与ensure    i 
= 0
Ruby之旅(16) 异常处理 rescue与ensure    file.read.each_line{
|line| puts "#{i+=1}.#{line}" }
Ruby之旅(16) 异常处理 rescue与ensure    puts
Ruby之旅(16) 异常处理 rescue与ensurerescue
Ruby之旅(16) 异常处理 rescue与ensure    puts 
"error:#{$!} at:#{$@}"
Ruby之旅(16) 异常处理 rescue与ensureensure
Ruby之旅(16) 异常处理 rescue与ensure    file.close
Ruby之旅(16) 异常处理 rescue与ensureend
上面的小程序读入一个指定的文件并加入行号进行输出,当产生错误时会输出错误信息以及提示,你可以故意输入一个不存在的文件名。

其实begin相当于c#的try
rescue相当于c#的catch
ensure相当于c#的finaly
raise相当于c#的throw


异常类的结构

 
异常类
  • Object

  • 相关文章: