Игнорировать такой файл не найден - PullRequest
0 голосов
/ 21 сентября 2009

Привет,

У меня есть скрипт ruby, который открывает файлы и вставляет данные из файла в базу данных. Некоторые из файлов отсутствуют, поэтому, когда скрипт пытается открыть файл, он выдает исключение не найденный файл.

Может кто-нибудь сказать мне, как я могу продолжить процесс вместо того, чтобы все это внезапно закончилось. Пожалуйста, обратите внимание, что это первое, что я сделал с рубином, так что будьте осторожны! : -)

Код, который я использую, выглядит следующим образом

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

Ответы [ 3 ]

5 голосов
/ 21 сентября 2009

Либо оберните открытие файла вызовом 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 голосов
/ 21 сентября 2009

Простая обработка исключений в одну строку:

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 голосов
/ 21 сентября 2009

Используйте 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 в цикл, это, вероятно, более эффективно)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...