2009-09-21 62 views
0

问候,忽略没有找到这样的文件

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

回答

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 2009-09-21 15:44:57

+0

查看Leonid Shevtsov的回答。如果你只想捕获文件找不到异常救援Errno :: ENOENT。 – yawn 2009-09-21 17:21:34

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 

(我也是o在循环中加上with_db,这可能更有效)