【问题标题】:Error Handling in GIF download scriptGIF 下载脚本中的错误处理
【发布时间】:2013-03-21 23:16:01
【问题描述】:

我正在学习编程,所以我想出了一些随机项目。我决定制作一个脚本来下载我在过去几年中收集的所有 GIF。一切似乎都在工作,除了我在中途收到一个错误,我的错误处理没有捕获(无效的访问模式“wb”,“ArgumentError URI:HTTP 资源是只读的)。我已经摆弄了一天多无法获得这项工作任何帮助或提示将不胜感激。

require 'json', 'open-uri'    
def download

file = open("C:/sites/bookmark/gifs.json")
json = file.read

parsed = JSON.parse(json)

gifs = parsed["children"]
file.close()
total = 0
gifsize = 0
    gifs.each do |key|

        source = "#{key["uri"]}"
        source.chomp
        gifname = "#{key["title"]}"
        gifname.gsub(/[^0-9a-z ]/i, '')
        open("#{gifname}.gif", "wb") do |file|

            begin
              open(source)                  
            rescue Exception => e
                case e.message
                    when /404/ then puts '404!' 
                    when /505/ then puts '505!'
                    when /408/ then puts '408!'
                    else puts 'idk #{e.message}'
                end
                file.close()
                File.delete("#{gifname}.gif")
                puts "Deleted #{key["title"]}.gig"
                next
            end

            open(source) do |uri|

                file.write(uri.read)
                total += 1
                gifsize += (uri.size / 1024)
                print "#{(uri.size)/1024} KiloBytes"
            end
            print " --- #{total}"
        end
        puts " next gif---"
    end
    puts "\n#{gifsize} Total KB Downloaded \n#{total} Total Gifs "

end

download()

谢谢

【问题讨论】:

    标签: ruby json error-handling


    【解决方案1】:

    gifname.gsub(/[^0-9a-z ]/i, '') 行实际上并没有做任何事情,因为String#gsub 方法不会修改字符串,而是返回一个修改后的字符串。 您需要改用String#gsub!gifname.gsub!(/[^0-9a-z ]/i, '')

    因此,gifname 可能是一个 HTTP URL,而open-uri 无法在写入模式下打开它,如错误消息所述。

    为了调试这种问题,你应该运行ruby调试器,或者放一堆puts语句来检查你的变量的内容。

    【讨论】:

    • 成功了,非常感谢!我不知道添加“!”是什么意思对 gsub 做了。
    • 这是一个常见的 Ruby 习惯用法,很多方法都在使用。在开发时,调试语句和 Ruby 文档 (ruby-doc.org) 是您最好的朋友。
    猜你喜欢
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多