您的位置:首页 > 编程语言 > Ruby

Ruby之旅(16) 异常处理 rescue与ensure

2008-01-17 13:24 375 查看
begin #开始

raise.. #抛出异常

rescue [ExceptionType = StandardException] #捕获指定类型的异常 缺省值是StandardException

$! #表示异常信息

$@ #表示异常出现的代码位置

else #其余异常

..

ensure #不管有没有异常,进入该代码块

end #结束

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

begin

puts

puts "file: #{name = ARGV.shift}"

file = open(name)

i = 0

file.read.each_line{|line| puts "#{i+=1}.#{line}" }

puts

rescue

puts "error:#{$!} at:#{$@}"

ensure

file.close

end
上面的小程序读入一个指定的文件并加入行号进行输出,当产生错误时会输出错误信息以及提示,你可以故意输入一个不存在的文件名。

其实begin相当于c#的try

rescue相当于c#的catch

ensure相当于c#的finaly

raise相当于c#的throw

异常类的结构

异常类
Object

Exception

(Interrupt) (ruby 1.7 特性 version 1.6以前的位置)
NoMemoryError
ScriptError

LoadError
(NameError) (ruby 1.7 特性 version 1.6以前的位置)
NotImplementedError
SyntaxError

SignalException

Interrupt (ruby 1.7 特性)

StandardError

ArgumentError
IndexError

KeyError (ruby 1.9 特性)

IOError

EOFError

LocalJumpError
NameError (ruby 1.7 特性)

NoMethodError (ruby 1.7 特性)

RangeError

FloatDomainError

RegexpError
RuntimeError
SecurityError
SystemCallError

Errno::EXXX

SystemStackError
ThreadError
TypeError
ZeroDivisionError

SystemExit
fatal
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: