繁体   English   中英

Ruby http请求的响应“ er?”间歇性地

[英]The response “er ?” is getting intermittently for Ruby http request

我正在使用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

由于我是红宝石的新手,所以不知道为什么反应如此。 一旦我下次运行脚本时正确获得响应,就可以了吗? 是回应。 请有人帮忙解决此问题。

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

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

正如@Stefan所提到的,请不要捕获异常,如果您不确定会得到什么,请将其保留为空白,ruby将为您做最好的事情,并抓住异常痕迹的正确部分,这只会使生活变得艰难,请参见: 为什么在Ruby中使用`rescue Exception => 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM