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
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
相关文章推荐
- Ruby中用begin/end …rescue…ensure … raise 来处理异常
- ruby 异常处理:rescue
- C#编程入门_异常处理_16
- ruby ROR中异常处理rescue与raise介绍
- ruby 异常处理:ensure
- Struts(16)异常处理
- 处理SQL2000附加数据库时出现【服务器: 消息 1813,级别 16,状态 2,行 1未能打开新数据库】的异常
- 详解React 16 中的异常处理
- 16.如何自学Struts2之Struts2异常处理[视频]
- AES加密异常处理 InvalidAlgorithmParameterException:expected IV length of 16 but was 32
- ruby 异常处理:ensure
- php5与mysql5 web 开发技术详解-16 错误与异常处理
- Ruby学习笔记_异常处理rescue
- TJI读书笔记16-异常处理
- ARM的异常处理方式简单介绍(16_08_26_01)
- JAVA | 16 - 异常的捕获及处理
- 16.怎样自学Struts2之Struts2异常处理[视频]
- 16.异常处理机制:exception
- 【译】异常处理的最佳实践
- JAVA WEB项目异常处理提示页