Я не думаю, что вы можете сделать это с помощью метода foreach
, потому что исключение создается не внутри блока, а внутри самого метода foreach
, но что-то подобное должно работать. В этом случае возникает исключение при вызове к смене, который вы затем можете спасти.
require 'csv'
csv_file = CSV.open("test.csv", :headers => true)
loop do
begin
row = csv_file.shift
break unless row
p row
rescue CSV::MalformedCSVError
puts "skipping bad row"
end
end
Кстати, ваш код выше не запускается, потому что когда вы переместили begin
rescue
, чтобы окружить метод foreach
, next
больше не действителен в этом контексте. Закомментируя оператор next
, код выполняется, но когда в методе foreach
вызывается исключение, метод просто завершается, и программа переходит к блоку спасения и больше не считывает строки из файла.