2011-04-01 286 views
1

我用 '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 

失敗?

回答

2

默認情況下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