"er ?"对 Ruby http 请求的响应间歇性地得到



我正在使用open-uri方法运行http请求。以下错误消息间歇性地获取而不是预期的输出。

发生 NoMethodError 类型的错误,消息是 nil:NilClass 的未定义方法 '[]'

的?

我的代码如下,

request_uri = "my url here"
request_query = ''
url = "#{request_uri}#{request_query}"
begin
  buffer = open(request_uri,
             'app-key' => ENV['API_KEY'],
             'app-token' => ENV['API_TOKEN'],
             'trail-Token' => ENV['TRAIL_TOKEN']).read
  parsed = JSON.parse(buffer)
  events = parsed['events']
  event = Array(events).last
  message = event['message']
  otp = message[-5,4]
  print "otp", otp
rescue Exception => ex
  puts "An error of type #{ex.class} happened, message is #{ex.message}"
  retry
end
puts "otp returned", otp

因为我是 ruby 的新手,不知道为什么反应会变成这样。一旦我下次运行脚本时正确获得响应 er ? 是响应。有人请伸出援助之手来解决问题。

这里的开始救援块非常大,您正在丢失异常详细信息,包括行号。

实际上,在某些时候,正在发生的事情是您在一个为 nil 的对象上调用 [],并且它失败了。哪一点?如果没有堆栈跟踪或较小的块,您将无法看到。

正如@Stefan提到的,请不要抓住异常,如果你不确定你会得到什么,把它留空,Ruby 会为你做最好的事情并抓住异常跟踪的正确部分,它只会让生活变得艰难,看看:为什么在 Ruby 中"拯救异常 => e"是一种糟糕的风格?

如果您想查看导致异常的确切行,我也肯定会限制重试。

begin
  retries ||= 0
  ...
rescue => ex
  puts "An error of type #{ex.class} happened, message is #{ex.message}"
  puts ex.backtrace
  retry if (retries += 1) < 3
end

最新更新