Asp Forum
Home
|
Login
|
Register
|
Search
Forums
>
comp.lang.ruby
rescue and principle of least surprise
matt
2/17/2009 3:50:00 AM
It came as a big surprise to me when I discovered that this code:
begin
# do stuff
rescue
# do rescue stuff
end
....could fail to catch exceptions thrown in the "do stuff" section. A
bare "rescue" looks to me like it ought to mean: catch every exception.
Instead it turns out to mean: catch a certain subset of exceptions. It
doesn't catch LoadError, it doesn't catch SyntaxError, etc. etc.
Of course now I know better (and I commonly write "rescue Exception"),
but it still feels wrong, especially in view of the "principle of least
surprise". And I see by a quick Google search that people regard this as
an annoying "gotcha". Is it worth proposing an actual change in the
language - that the default rescue be Exception instead of
StandardError? m.
--
matt neuburg, phd = matt@tidbits.com,
http://www.tidbits...
Leopard -
http://www.takecontrolbooks.com/leopard-custom...
AppleScript -
http://www.amazon.com/gp/product/...
Read TidBITS! It's free and smart.
http://www.t...
1 Answer
Rick DeNatale
2/17/2009 1:13:00 PM
0
[Note: parts of this message were removed to make it a legal post.]
On Mon, Feb 16, 2009 at 11:21 PM, matt neuburg <matt@tidbits.com> wrote:
> It came as a big surprise to me when I discovered that this code:
>
> begin
> # do stuff
> rescue
> # do rescue stuff
> end
>
> ...could fail to catch exceptions thrown in the "do stuff" section. A
> bare "rescue" looks to me like it ought to mean: catch every exception.
> Instead it turns out to mean: catch a certain subset of exceptions. It
> doesn't catch LoadError, it doesn't catch SyntaxError, etc. etc.
>
> Of course now I know better (and I commonly write "rescue Exception"),
> but it still feels wrong, especially in view of the "principle of least
> surprise". And I see by a quick Google search that people regard this as
> an annoying "gotcha". Is it worth proposing an actual change in the
> language - that the default rescue be Exception instead of
> StandardError? m.
>
No, I don't think so. The distinction between StandardErrors and the others
is carefully thought out, and makes sense.
Exceptions which are not StandardErrors representation situations which are
normally not handled by a 'normal' Ruby program, either because it's usually
better to handle it the standard way (e.g. a SignalException because someone
issued a kill command, or a SystemExit exception), or difficult for the
program to recover from (e.g. ScriptErrors, and NoMemoryErrors).
The fact that you can explicitly rescue these exceptional exceptions means
that you don't HAVE to let them be handled in the standard way, but you
still have to carefully consider how that rescue clause needs to be written.
Also, if feel the need to rescue one or more of these low level Exceptions,
I it's usually wise to rescue them specifically rather than rescuing
Exception in general.
--
Rick DeNatale
Blog:
http://talklikeaduck.denh...
Twitter:
http://twitter.com/Ri...
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
rescue and principle of least surprise
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password