Ruby - “做”循环和“救援”

时间:2015-12-16 11:15:08

标签: ruby loops rescue

我正在使用Microsoft计算机视觉API。 API可以识别面部,并提供有关图像中有多少人的数据,估计的年龄,以及估计的性别。但是,我有一个“do”循环,我无法“拯救”。这是下面的代码:

 values = json_data['faces'].map do |result| 

这是我收到的错误:

C:/Users/KVadher/Desktop/micr1.rb:122:in `block in <main>': undefined method `[]' for nil:NilClass (NoMethodError)

我希望我的代码看起来像这样:

 begin
  values = json_data['faces'].map do |result| 
 rescue
 end

然而,当我这样做时,我收到以下错误:

C:/Users/USERNAME/Desktop/micr1.rb:123: syntax error, unexpected keyword_rescue

如果请求不适用,我该如何传递我的代码?

2 个答案:

答案 0 :(得分:5)

map阻止end

begin
  values = json_data['faces'].map do |result|
    # ...
  end
rescue
end

答案 1 :(得分:2)

正如亚历山大指出的那样,end语句缺少do解释了意外的关键字错误。

然而,以这种方式使用救援是not good practice。它将有效地掩盖将来发生的任何问题。你应该总是具体拯救你的东西。所以这会更好:

begin
  values = json_data['faces'].map do |result|
    ...
  end
rescue NoMethodError
end

但是,错误告诉您json_data为零。因此,要解决此问题,更简单的解决方案是:

if json_data
  values = json_data['faces'].map do |result|
     ...
  end
else
  values = [] # or whatever you want values to be if there are none
end