Ruby - "Do" 循环和 "rescue"

Ruby - "Do" loop and "rescue"

我正在使用 Microsoft 计算机视觉 API。 API 可以识别人脸并提供图像中有多少人、他们的估计年龄以及估计的性别等数据。但是,我有一个 "do" 循环,我不能 "rescue." 下面是代码:

 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

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

map块应该有end

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

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

但是,这样使用rescue是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