From: Mark Hubbart Date: 2004-09-26T15:22:18+09:00 Subject: Re: Nuby: How do I find out what exception was thrown? On Sep 25, 2004, at 9:19 PM, Roy Pardee wrote: > Thanks all for the responses. I think the exception is not > Errno::EACCES tho. If I throw this at the end of my script: > > rescue Errno::EACCESS => exp > puts "In rescue section" > end > > Ruby comes back with: > > F:\>ruby KillOwnerLok.rb > KillOwnerLok.rb:18: syntax error > rescue Errno::EACCESS => exp > ^ > > I must be doing something very wrong, b/c if I change that to: > > rescue StandardError > puts "In rescue section" > end > > Ruby says: > > F:\>ruby KillOwnerLok.rb > KillOwnerLok.rb:18: syntax error > rescue StandardError > ^ > > Any further advice? The rescue keyword can be used in two and a half different ways: 1. As a statement modifier: puts 0/0 rescue puts 23 # prints 23 2. In a begin...end block: begin puts 0/0 rescue ZeroDivisionError => err puts 42 end # prints 42 2.5. Within other certain supported code blocks: def foo(bar, baz) bar/baz rescue ZeroDivisionError 23 rescue Exception 42 end If it isn't used in one of these ways, it gives a parse error. I suspect that's what the problem is; you just need to enclose the error-causing part of the script in a begin...end block, with a rescue clause. cheers, Mark > > Thanks! > > -Roy > > Tim Hunter wrote in message > news:... >> Roy Pardee wrote: >> >>> If I try to run this while the file in question is opened by another >>> process I get this output: >>> >>> ------------------------------------------ >>> F:\>ruby KillOwnerLok.rb >>> \\blackula\Profiles\Laurel\Application Data\Qualcomm\Eudora\owner.lok >>> found! >>> KillOwnerLok.rb:9:in `delete': Permission denied - >>> \\blackula\Profiles\Laurel\Ap >>> plication Data\Qualcomm\Eudora\owner.lok (Errno::EACCES) >>> from KillOwnerLok.rb:9 >>> ------------------------------------------ >>> >>> I'd like to print my "Could not delete..." message in a rescue >>> section, but I don't know how to translate the error message from the >>> output into something 'rescuable'. How do I do that? >> >> Ruby's telling you: Errno::EACCES >> >> rescue Errno::EACCES => exp >> puts "Caught an exception: #{exp.message}" >> end >> >> But you probably want to catch other Errno's, too. You can catch them >> all by >> rescuing StandardError. If you need to know exactly which exception >> was >> thrown you can call `exp.class' in your rescue clause. >