2013-08-28 7 views
1

나는 나에게 오류주고 다음 코드 줄이 있습니다루비 구조 구문 오류

rescue Timeout::Error => e 
    logs.puts("Rescued a timeout error...#{e}") 
    email_ids_all.each do |email_delete| 

     call= "/api/v2/emails/#{email_delete}/" 
     uri= HTTParty.delete("https://www.surveys.com#{call}", 
      :basic_auth => auth, 
      :headers => { 'ContentType' => 'application/x-www-form-urlencoded', 'Content-Length' => "0" } 
    ) 
     puts "Deleted email #{email_delete}".green 
     log.puts("Deleted email #{email_delete}") 
    end 
    abort #abort entire script after deleting emails 
    end 

내가 수신하고 오류이입니다 :

기본적으로
syntax error, unexpected keyword_rescue, expecting $end 
    rescue Timeout::Error => e 
     ^

난 그냥 실행하려고 스크립트가 시간 초과되면 API 삭제 호출. 내가 블록 rescue에 넣어 뭘 상관 없어, 같은 오류가 나타납니다. rescue 메서드에서 구문이 잘못되었습니다. 다음과 같이

+2

분명히 적절한 위치에'시작 '이 없습니다. 모든 코드를 붙여 넣지 않으면 정확히 말할 수 없습니다. –

+0

아마도 대답은'시작 '이 전혀 없다는 것입니다. 이것은 전체 코드입니다 ... – Luigi

+0

나는 begin을 추가하고 스크립트는 잘 작동합니다 - 왜 downvotes 모르지만 도움을 주셔서 감사합니다. 의견을 답변으로 보내 주시면 기꺼이 크레딧을드립니다. – Luigi

답변

16

rescue를 사용하는 형식은 다음과 같습니다

여기
begin 
    # Code you want to run that might raise exceptions 
rescue YourExceptionClass => e 
    # Code that runs in the case of YourExceptionClass 
rescue ADifferentError => e 
    # Code that runs in the case of ADifferentError 
else 
    # Code that runs if there was no error 
ensure 
    # Code that always runs at the end regardless of whether or not there was an error 
end 

는 훨씬 더 많은 정보와 질문 : Begin, Rescue and Ensure in Ruby?.

+0

완벽하게 이해할 수 있습니다. 설명 주셔서 감사 드리며 간단히 '시작'부분을 놓치 셨습니다. – Luigi

+1

@LeviStanley 메소드의 모든 코드를 구출하고자한다면'begin' 키워드가 필요 없다는 점에 유의할 필요가 있습니다. –

+0

암시 적 예외 블록 (예 : 메소드 정의시) 또는 다른 것을 의미합니까? –