0

失敗するステートメントがあります:

result = service.load_data()

以下はエラーを抑制し、確認できますnil

result = service.load_data() rescue nil

しかし、次のことを行うと、最初のエラーが UI までスローされdetails、例外が発生しません。

begin
   result = service.load_data()
rescue => details         
   logger.fatal "Failed to load the data: #{details}"
end

私が見逃しているばかげた詳細があると確信していますが、ここで問題を見つけることができないようです. では、なぜrescueブロックが呼び出されないのでしょうか?

更新:私が得たエラーはこれでした:

getaddrinfo: nodename nor servname provided, or not known
4

1 に答える 1

2
begin
   result = service.load_data()
rescue AnExceptionKlass => details    # here the name is SocketError    
   logger.fatal "Failed to load the data: #{details}"
end

上記を使用します。

以下のようにここでエラーを再現しようとしました:

require 'net/http'
Net::HTTP.start('http://www.google.com') do |http|
response = http.get('/')
puts response
end
#=> getaddrinfo: No such host is known.  (SocketError)

以下のように修正しました。

require 'net/http'

begin

  htt = Net::HTTP.start('http://www.google.com')
  response = htt.get('/')
  puts response

rescue SocketError => details    # or the Exception class name may be SocketError    
   p "Failed to load the data: #{details}"
end

#=> "Failed to load the data: getaddrinfo: No such host is known. "
于 2013-04-24T17:43:05.750 に答える