异常处理

问题描述:

我用 'rubyoverflow' 创业板扶手:异常处理

begin 
    puts "=== 1 ===" 
    qt = Questions.retrieve_by_tag(tag).questions 
    puts "=== 2 ===" 
rescue 
    puts "=== 3 ===" 
end 

但有时我得到的控制台上的错误:

在行843列4

无法解析YAML

C:/Ruby192/lib/ruby/1.9.1/psych.rb:148:在parse' C:/Ruby192/lib/ruby/1.9.1/psych.rb:148:in parse_stream'... ruby​​overflow (1.0.1)lib/ruby​​overflow.rb:86:in request' ... C:/Ruby192/lib/ruby/1.9.1/webrick/server.rb:183:in block in start_thread'

但问题不是关于创业板的错误,但对异常处理。我在控制台中只得到线:

puts "=== 1 ===" 

而不是线

puts "=== 2 ===" 
    puts "=== 3 ===" 

为什么呢?

我怎样才能恢复我的程序的esecution如果行

qt = Questions.retrieve_by_tag(tag).questions 

失败?

默认情况下rescue陷阱StandardError和任何继承它。

the docs

默认情况下,仅抢救StandardError的拦截及其后代......

例外是引发可能不是这一点,所以抢救不处理它。

通常你可以计算出从文档的方法抢救的参数使用什么提高,但是,如果没有,你可以使用

rescue Exception => e 
    print e.to_s 
end 

,看看有什么异常,然后用替代Exception那个价值。

更多信息,在互联网上,但这里有一段代码来print a list of Exceptions

+0

这不是它。注意它是在另一个线程上抛出的异常:'/webrick/server.rb:295:in'start_thread'中的块。我遇到了与rsolr Sunspot相同的问题。它会在模型​​保存上创建一个回调,并且似乎无法捕捉它!我试图捕获特定的异常'Errno :: ECONNREFUSED',还有'Exception',但它仍然失败。堆栈跟踪不会列出我的任何代码。这是所有的框架代码,从Webbrick下降到rsolr。 – Chloe 2014-03-28 03:45:53