From: Stefan Mahlitz Date: 2006-01-27T04:54:47+09:00 Subject: Re: Can't rescue this (http-access2) Horacio Sanson wrote: > > I have a code like this > > def connect(redirect=3) > > # Do we have a url to process do we?? if not simply return > if not @uri > return nil > end > > begin > @clnt = HTTPAccess2::Client.new() > @clnt.set_cookie_store("cookie.dat") > @resp = @clnt.get(@uri) > @code = @resp.status.to_s > @message = @resp.reason > rescue SocketError > @code = "404" > @message = "Not Found" > rescue Exception => e > puts "#{self.class} Exception connecting to #{@uri.to_s} : #{e.to_s}" > @code = "408" > @message = e.to_s > end > > @resp > end > > > > this works as expected but some times (not always) I get an error and the > scripts bails out. > > c:/ruby/lib/ruby/site_ruby/1.8/http-access2.rb:1466:in `gets': Invalid > argument (Errno::EINVAL) > from c:/ruby/lib/ruby/site_ruby/1.8/http-access2.rb:1466:in > `parse_header' > from c:/ruby/lib/ruby/site_ruby/1.8/http-access2.rb:1464:in `timeout' > from c:/ruby/lib/ruby/1.8/timeout.rb:55:in `timeout' > from c:/ruby/lib/ruby/site_ruby/1.8/http-access2.rb:1464:in > `parse_header' > from c:/ruby/lib/ruby/site_ruby/1.8/http-access2.rb:1422:in > `read_header' > from c:/ruby/lib/ruby/site_ruby/1.8/http-access2.rb:1254:in > `get_status' > from c:/ruby/lib/ruby/site_ruby/1.8/http-access2.rb:466:in > `do_get_header' > from c:/ruby/lib/ruby/site_ruby/1.8/http-access2.rb:436:in > `do_get_block' > ... 6 levels... > from ./scrapper.rb:1000:in `start' > from ./scrapper.rb:984:in `each' > from ./scrapper.rb:984:in `start' > from main.rb:208 > > > > I think I am rescuing all possible things that could go wrong here so my > script should continue ignoring this error but the scripts stops. > > How can I rescue this?? a simple rescue => e should work as Errno is derived from SystemCallError (which inherits from StandardError). See Pickaxe II page 108 for details. Actually I don't know why catching Exception doesn't work.