Я новичок в Ruby и имею опыт работы с Python. Чтобы помочь в изучении языка, я портирую существующий скрипт Python, чтобы провести параллельное сравнение. Пока у меня есть небольшой фрагмент кода, и я не понимаю, почему на консоли выводится «nil». Код ниже:
#!/usr/bin/ruby
require 'date'
backup_dirs = ['/backups/db', '/backups/log']
backup_dirs.each do |backup_dir|
Dir.glob(backup_dir + '/' + '*.*.*.*.*.*').each do |filename|
begin
creation_date = DateTime.strptime(filename.split('.')[3], '%m%d%Y%H%M')
rescue
puts "Skipping #{filename}, invalid file."
end
end
puts 'File is okay.'
end
Если метод DateTime.strptime
вызывает исключение, запускается rescue
и puts
выводит строку штраф. За исключением того, что после этого идет nil
. Я "погуглил" и обнаружил, что puts
возвращает nil
. Но почему это отображается только в области rescue
, а не в строке File is okay.
.
Т.е. пример rescue
вывода будет:
Skipping /backups/log/fs.server.dir.999999999999.14.log, invalid file.
nil
И как мне заставить его перестать отображать это на консоли? Я уверен, что это фундаментальная языковая вещь, просто очень новая для языка, поэтому мы будем очень благодарны за любое понимание.
Спасибо - Том
nil
s никогда не отображаются в выводе, если вы не сообщите об этом (и вам действительно нужно видеть там nil, посколькуputs nil
напечатает пустую строку) - person BroiSatse   schedule 04.10.2014puts
, который был печатьnil
, как и должно было быть! Извините ... первый день игры с этим языком. Большое спасибо за помощь и попытку продублировать проблему. - person user164266   schedule 04.10.2014next
после строкиputs "skipping...
, фактически пропуская недопустимый файл. - person steenslag   schedule 04.10.2014