2013-07-18 3 views
1

디렉토리의 각 파일에 대해 무언가를 수행 한 다음 다른 파일에 결과를 기록해야합니다. 타임 아웃 예외가 발생하면 루프의 다음 반복을 계속 진행합니다. 쉘에서for 루프의 시간 초과 예외 캐치

require 'timeout' 
timeout_in_seconds = 60 

for fl in Dir.glob('/dir/files') 
    begin 
    Timeout::timeout(timeout_in_seconds) do 
#do something here to get $results 
File.open('new_file', 'w') { |file| file.write(results) } 
    end 
    rescue Timeout::Error 
next 
end 

실행 오류입니다 : 나는이 문제를 해결하는 방법에 관해서는

syntax error, 'unexpected kRESCUE, expecting kEND 
rescue Timeout::Error 

어떤 아이디어?

답변

0

위의 코드에 end 두 개를 놓쳤습니다. 그것을 아래와 같이 적는다.

require 'timeout' 
timeout_in_seconds = 60 

for fl in Dir.glob('/dir/files') 
    begin 
    Timeout::timeout(timeout_in_seconds) do 
     #do something here to get $results 
     File.open('new_file', 'w') { |file| file.write(results) } 
    end 
    rescue Timeout::Error 
     next # although I am not sure why this is needed. 
    end 
end 
+1

음, 음, 하향 투표가 매우 유용 할 수 있습니다. chafe/redundant 게시물 잘라 내기. 아마도이 모든 것에 대해 외교적 인 것일 수도 있습니다 :-) – Renklauf

+0

:하지만 여기에 사람들은 대답함으로써 배우기 때문에, 잘못된 것이있을 때마다, 다른 사람들에게 알려줘야합니다. 무엇이 잘못 되었나요? 그게 훌륭한 가르침이 될 수 있습니다 ... 제 생각 엔 ... :) –

1

rescue은 종료 절 앞에 있어야합니다.

require 'timeout' 
timeout_in_seconds = 60 

for fl in Dir.glob('/dir/files') 
    begin 
    Timeout::timeout(timeout_in_seconds) do 
    #do something here to get $results 
    File.open('new_file', 'w') { |file| file.write(results) } 
    rescue Timeout::Error 

    end 
end