异常处理
问题描述:
我用 'rubyoverflow' 创业板扶手:异常处理
begin
puts "=== 1 ==="
qt = Questions.retrieve_by_tag(tag).questions
puts "=== 2 ==="
rescue
puts "=== 3 ==="
end
但有时我得到的控制台上的错误:
在行843列4
无法解析YAMLC:/Ruby192/lib/ruby/1.9.1/psych.rb:148:在
parse' C:/Ruby192/lib/ruby/1.9.1/psych.rb:148:in
parse_stream'... rubyoverflow (1.0.1)lib/rubyoverflow.rb:86:inrequest' ... 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。
这不是它。注意它是在另一个线程上抛出的异常:'/webrick/server.rb:295:in'start_thread'中的块。我遇到了与rsolr Sunspot相同的问题。它会在模型保存上创建一个回调,并且似乎无法捕捉它!我试图捕获特定的异常'Errno :: ECONNREFUSED',还有'Exception',但它仍然失败。堆栈跟踪不会列出我的任何代码。这是所有的框架代码,从Webbrick下降到rsolr。 – Chloe 2014-03-28 03:45:53