忽略找不到这样的文件

时间:2009-09-21 15:38:54

标签: ruby

问候,

我有一个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 个答案:

答案 0 :(得分:5)

通过调用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

答案 1 :(得分: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

答案 2 :(得分: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放在循环周围,它可能更有效率)