2009-09-21 5 views
0

인사말,해당 파일을 무시하십시오.

파일을 열고 파일 내부의 데이터를 데이터베이스에 삽입하는 루비 스크립트가 있습니다. 일부 파일이 누락되어 있으므로 스크립트가 파일을 열려고 시도 할 때 파일을 찾을 수 없음 예외가 발생합니다.

갑자기 끝나는 모든 일 대신에 내가 어떻게 프로세스를 계속할 수 있는지 말해 줄 수 있습니까? 이것이 루비와 함께 한 첫 번째 일 이니주의하십시오.

def insertData 
for i in (1..93) 
puts "now looking at #{i}" 
file = File.new("callspan/#{i}", "r") 
while(line = file.gets) 
with_db do |db| 
db.query(line) 
end 
end 
end 

답변

4

다음 중 하나를 제외한에서 File.exists에 전화?, 또는 구조와 파일의 개방을 랩으로 :-)

내가 사용하는 코드입니다. 나는 당신이 일반적인 경우 (예외는 "예외적 인"문제에 대한 것임)가되기를 기대한다면 전자를 선호한다.

def insertData 
    for i in (1..93) 
    puts "now looking at #{i}" 
    next if !File.exists?("callspan/#{1}") 
    file = File.new("callspan/#{i}", "r") 
    while(line = file.gets) 
     with_db do |db| 
     db.query(line) 
     end 
    end 
    end 
end 
2

간단한 한 줄 예외 처리 :

10/0 rescue nil 

구조에만 파일을 찾을 수 없습니다 예외 :

def insert_data 
    (1..93).each do |i| 
    puts "now looking at #{i}" 
    begin 
     file = File.new("callspan/#{i}", 'r') 
     while(line = file.gets) 
     with_db do |db| 
      db.query(line) 
     end 
     end 
    rescue Errno::ENOENT 
     puts "skipping #{i}" 
    end 
    end 
end 
+0

어디서 그걸 붙잡습니까? – Steve

+0

Leonid Shevtsov의 답변보기. 당신이 발견 한 파일을 잡기를 원한다면 예외 구조 Errno :: ENOENT. – yawn

0

사용 rescue nil는 다음과 같이 예외를 잡으려고 :

def insertData 
    for i in (1..93) 
    puts "now looking at #{i}" 
    File.open("callspan/#{i}", "r").each_line do |line| 
     with_db do |db| 
     db.query(line) 
     end 
    end rescue nil 
    end 
end 

(나는 사이클 주위에 with_db 넣기, 아마도 더 효율적일 것입니다)

관련 문제