http://www.cnblogs.com/watir/archive/2009/03/28/1423951.html
begin
#
开始
raise .. # 抛出异常
rescue [ExceptionType = StandardException] # 捕获指定类型的异常 缺省值是StandardException
$! # 表示异常信息
$@ # 表示异常出现的代码位置
else # 其余异常
..
ensure # 不管有没有异常,进入该代码块
end # 结束
raise .. # 抛出异常
rescue [ExceptionType = StandardException] # 捕获指定类型的异常 缺省值是StandardException
$! # 表示异常信息
$@ # 表示异常出现的代码位置
else # 其余异常
..
ensure # 不管有没有异常,进入该代码块
end # 结束
可以结合$!错误原因,和$@错误位置做一个错误捕获并提示的小程序,比如:
begin
file = open(name)
i = 0
file.read.each_line{|line| puts "#{i+=1}.#{line}" }
rescue
puts "error:#{$!} info "
puts "the error at:#{$@}"
ensure
file.close
end
上面的小程序读入一个指定的文件并加入行号进行输出,当产生错误时会输出错误信息以及提示,可以故意输入一个不存在的文件名。
其实
begin相当于java 的try
rescue相当于java的catch
ensure相当于java 的 finaly
raise相当于java 的 throw
异常类的结构为:
Object
- Exception
- (Interrupt) (ruby 1.7 特性 version 1.6以前的位置)
- NoMemoryError
- scrīptError
- LoadError
- (NameError) (ruby 1.7 特性 version 1.6以前的位置)
- NotImplementedError
- SyntaxError
- SignalException
- Interrupt (ruby 1.7 特性)
- StandardError
- ArgumentError
- IndexError
- KeyError (ruby 1.9 特性)
- IOError
- LocalJumpError
- NameError (ruby 1.7 特性)
- NoMethodError (ruby 1.7 特性)
- RangeError
- RegexpError
- RuntimeError
- SecurityError
- SystemCallError
- SystemStackError
- ThreadError
- TypeError
- ZeroDivisionError
- SystemExit
- fatal