问候,
我有一个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
答案 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放在循环周围,它可能更有效率)