论坛首页 编程语言技术论坛

rescue语句中的else用法疑问

浏览 4046 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-12-11  
按照文档上说, else应该是用来捕获没有抓取到的异常

引用
In the event that error types are specified, it may be that an exception does not match any of these types. For that situation, we are allowed to use an else clause after all the rescue clauses.
begin
  # Error-prone code...
rescue Type1
  # ...
rescue Type2
  # ...
else
  # Other exceptions...
end



但是实际上 我测试发现 else 语句只有在没有异常抛出的情况下才会run

begin
    puts "do something"
rescue NameError 
    puts "nameerror  #{$!}"
else
    puts "else  #{$!}"
end


结果是

引用

do something
else


如果存在没有rescue到的异常, else并不会执行,如下
begin
    raise ZeroDivisionError,"faint"                                                                                                 
rescue NameError
    puts "nameerror  #{$!}"
else
    puts "else  #{$!}"
end


我的环境ruby 1.8.4 (2005-12-24) [i686-linux]
   发表时间:2006-12-11  
抓没匹配的异常不加参数就可以了:
   1. begin  
   2.     raise ZeroDivisionError,"faint"                                                                                                   
   3. rescue NameError  
   4.     puts "nameerror  #{$!}"  
   5. rescue
   6.     puts "else  #{$!}"  
   7. end  
0 请登录后投票
   发表时间:2006-12-11  
rescue 默认是匹配StandardError  其他Error抓不住得
0 请登录后投票
   发表时间:2006-12-11  
那就是rescue Exception吧,我还没注意到默认匹配的是StandardError呢。Exception是老祖宗了,写出来更清晰。
0 请登录后投票
   发表时间:2006-12-11  
这样做确实是可以的

我想搞清楚else的用法, 似乎和文档不合 如果

begin
 ....
rescue
else
  [b]dosomething[/b]
end 

中的else只能在无异常的时候执行的话,那么else岂不是无用语句
下面这个就可以这样干了
begin
 ....
 [b]dosomething[/b]
rescue
end 


也就是把语句直接贴到rescue前面就和使用else等价???
0 请登录后投票
   发表时间:2006-12-11  
是这个意思,我很少看到其它项目里有人在rescue后面用else,大概就是这个原因吧,感觉没什么价值。
0 请登录后投票
   发表时间:2006-12-11  
我从来没见过这么用else的,翻了翻pr2这么说的:
The body of an else clause is executed only if no exceptions are raised by the main body of code.
f = File.open("testfile")
begin
  # .. process
rescue
  # .. handle error
else
  puts "Congratulations no errors!"
ensure
  f.close unless f.nil?
end
1 请登录后投票
   发表时间:2006-12-11  
貌试我翻的"the ruby way" 说错了, 汗一个
1 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics