From: Robert Klemme Date: 2005-11-03T04:27:08+09:00 Subject: Re: Trapping errors. Hugh Sasse wrote: > On Thu, 3 Nov 2005, Robert Klemme wrote: > >> Hugh Sasse wrote: >>> On Thu, 3 Nov 2005, Robert Klemme wrote: >>> >>>> Hugh Sasse wrote: >>>>> I see my changes to fileutils are now in the Ruby CVS. >>>>> However, even with >>>>> rescue Exception, SystemCallError => e >>>>> or >>>>> rescue Exception, Errno::EACCES, Errno::EBUSY => e >>>>> >>>>> I still cannot trap this error. From the call stack this part of >>>>> the code is being used, so why won't the error cause ruby to go >>>>> back up the callstack until it finds this rescue clause? >>>> >>>> Maybe there's another rescue clause that is closer to the place >>>> where the exception is thrown... >>> >>> But unless I have completely misunderstood the point of rescue, even >>> if that calls raise, the exception will still be caught by my >>> enclosing rescue. >> >> But who guarantees that the other rescue clause actually throws >> again? If it doesn't you can't catch it. >> >> .... >> rescue Exception => e >> puts "Catch me if you can >:-}" >> end >> >> ;-) >> > > Then it's already caught, and I should never see the error. Why not? If it's printed in the other rescue clause you would see it. Or am I missing something here? robert > > neelix hgs 58 %> irb > irb(main):001:0> begin > irb(main):002:1* begin > irb(main):003:2* raise StandardError > irb(main):004:2> rescue => e > irb(main):005:2> puts "catch me if you can #{e}" > irb(main):006:2> end > irb(main):007:1> rescue > irb(main):008:1> puts "caught something" > irb(main):009:1> end > catch me if you can StandardError > => nil > irb(main):010:0> > > i.e. that's a normal exit. > > So, I have an error that is not already caught, and I can't catch > it. > >> Cheers >> >> robert >> > > Hugh