首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > Ruby Rails >

Ruby => 异常处理与例外

2012-08-30 
Ruby 错误处理与例外1. 例外处理的写法:begin有可能发生例外的处理动作rescue例外发生时的处理措施endR

Ruby => 错误处理与例外
1. 例外处理的写法:

begin  有可能发生例外的处理动作rescue   例外发生时的处理措施end

Ruby将例外也视为对象。在rescue后面指定变量名称,可得例外对象。
begin  有可能发生例外的处理动作rescue => 用来存放例外对象的变量  例外发生时的处理措施end

即使没有指定变量名称,例外对象也会自动存放到表9.1中所列出的变量里,不过明确指定变量名称程序会比较好懂。
例外发生时会自动设定的变量
begin 有可能发生例外的处理动作rescue => 用来存放例外对象的变量 例外发生时的处理措施ensure 无论例外发生与否都坚持要执行的动作end

begin  有可能发生例外的处理动作ensure   无论例外发生与否都坚持要执行的动作end


3. 重新执行
在rescue语句块里可以使用retry语句重新执行begin语句块的动作。
例如:
在下面的示例中,会每隔10秒重新尝试执行open方法,成功时则返回文件内容。
file = ARGV[0]begin  io = open(file)rescue  sleep 10  retryenddata = io.readio.close

但要注意文件一直打不开的话,会形成无穷循环。

4. rescue表达式
# -*- coding: utf-8 -*-=beginrescue可以作为表达式, 当发生意外时,则返回rescue的值。=end# val = "abc"                # n => 0val = 3                      # n => 3n = Integer(val) rescue 0p n


5. 例外处理补充
当例外处理的begin~end范围就是整个方法本身时,可以省略begin与end,只写rescue与ensure语句块。

6. 例外类
所有例外都是Exception类的子类。
在resure语句块没有指定例外类时,会捕捉StandardError与其子类。
所以自己要定义各种例外类时,一般都会先继承StandardError类,接着再往下继承各种例外类。

7. 引发例外
自己想要让例外发生时,则使用raise方法。

8. catch与throw
def test_throw  throw :testendputs "test start"catch(:test){  puts "before test_throw()"  test_throw  puts "after test_throw()"}puts "test end"

热点排行