我有这个Ruby脚本将我的Word文档转换为.txt格式。 它工作正常,可以互相转换多个文件,但现在有一个错误。 如何让脚本继续下一个文件,跳过发出错误的文件?请不要使用其他技术的建议,我很满意这个。
require 'win32ole'
wdFormatDOSText = 4
word = WIN32OLE.new('Word.Application')
word.visible = false
begin
ARGV.each do|file|
myFile = word.documents.open(file)
new_file = file.rpartition('.').first + ".txt"
word.ActiveDocument.SaveAs new_file, wdFormatDOSText
puts new_file
word.activedocument.close(false) # no save dialog, just close it
end
rescue WIN32OLERuntimeError => e
puts e.message
puts e.backtrace.inspect
sleep 30
ensure
word.quit
end
sleep 3
答案 0 :(得分:1)
在迭代集合时,您可以在每次迭代开始时启动一个新的begin...rescue...end
块,并在救援块中调用next
:
[ "puts 'hello'", "raise '!'" , "puts 'world'" ].each do |str|
begin
eval str
rescue
puts "caught an error, moving on"
next
end
end
# => hello
# => caught an error, moving on
# => world
所以在你的情况下它看起来像这样:
ARGV.each do |file|
begin
# ...
rescue WIN32OLERuntimeError => e
puts e.message
next
end
end