2015-12-16 10 views
-2

Я использую API видения компьютера Microsoft. API может распознавать лица и давать данные о том, сколько людей находится в образе, о том, какой он возраст, и какой гендерный показатель. Тем не менее, у меня есть цикл «do», который я не могу «спасти». Вот код ниже:Ruby - цикл «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 

Как передать мой код, если запрос к нему не применяется?

ответ

5

Вы map блок должен иметь end

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

Это сработало! Большое спасибо. – semiflex

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 
+0

Ваш код поднимет ошибку, если присутствует json_data, и это не хэш –

+0

@AlexanderShlenchack, это правда, но подчеркивает мою точку зрения. Вы должны создать свой код, чтобы иметь дело с ошибками, о которых вы знаете, и позволить другим ошибкам выходить из системы через систему. Единственная ошибка, о которой идет речь, требует программной обработки: 'json_data == nil'. Если json может быть чем-то иным, чем хешем или nil, тогда это нужно будет обрабатывать тоже, но в этом вопросе нет ничего, о котором говорится, что это так. – ReggieB

+1

Я полностью согласен с вами. Это было мое маленькое замечание, не более того. –

 Смежные вопросы

  • Нет связанных вопросов^_^