[ruby-core:64077] [ruby-trunk - Feature #6739] One-line rescue statement should support specifying an exception class

From: funny.falcon@...
Date: 2014-07-27 16:12:50 UTC
List: ruby-core #64077
Issue #6739 has been updated by Yura Sokolov.


 do_something rescue SomeError with puts "SomeError occured"
 16.07.2012 1:50 пользователь "Quintus (Marvin Gülker)" <sutniuq@gmx.net>
 написал:
 
 >
 > Issue #6739 has been reported by Quintus (Marvin Gülker).
 >
 > ----------------------------------------
 > Feature #6739: One-line rescue statement should support specifying an
 > exception class
 > https://bugs.ruby-lang.org/issues/6739
 >
 > Author: Quintus (Marvin Gülker)
 > Status: Open
 > Priority: Normal
 > Assignee:
 > Category: core
 > Target version: 2.0.0
 >
 >
 > Hi there,
 >
 > When wrapping up a single line inside a begin/rescue block I feel
 > constantly annoyed that I have to create a whole lot of bloated code just
 > to rescue from a specific exception. For example:
 >
 >   begin
 >     File.read("myfile.txt")
 >   rescue Errno::ENOENT
 >     puts "No file there"
 >   end
 >
 > Now it's possible to do this:
 >
 >   File.read("myfile.txt") rescue puts "No file there"
 >
 > But this forces me to rescue from StandardError which is not really what I
 > want, because it swallows exceptions I'd rather have wanted to see, e.g. if
 > I mistyped `File.read' as `File.raed' this would be swallowed as well. I
 > know it is possible to compress the multiline statements above into a
 > single line by using semicolons, but it's better to avoid them as they
 > decrease readability.
 >
 > So my suggestion is to add something like the following syntax to Ruby:
 >
 >   File.read("myfile.txt") rescue Errno::ENOENT, puts "No file there"
 >
 > This way it is more consise than having to write five lines (instead of
 > just one) and still reads good (as opposed to the semicolon trick). Maybe
 > the syntax isn't ideal as the comma operator is already used elsewhere, but
 > the general idea should be clear though.
 >
 > Valete,
 > Marvin
 >
 >
 > --
 > http://bugs.ruby-lang.org/
 >
 >

----------------------------------------
Feature #6739: One-line rescue statement should support specifying an exception class
https://bugs.ruby-lang.org/issues/6739#change-48086

* Author: Marvin Gülker
* Status: Feedback
* Priority: Normal
* Assignee: Yukihiro Matsumoto
* Category: core
* Target version: Next Major
----------------------------------------
=begin
Hi there,

When wrapping up a single line inside a (({begin}))/(({rescue})) block I feel constantly annoyed that I have to create a whole lot of bloated code just to rescue from a specific exception. For example:

  begin
    File.read("myfile.txt")
  rescue Errno::ENOENT
    puts "No file there"
  end

Now it's possible to do this:

  File.read("myfile.txt") rescue puts "No file there"

But this forces me to rescue from ((|StandardError|)) which is not really what I want, because it swallows exceptions I'd rather have wanted to see, e.g. if I mistyped `(({File.read}))' as `(({File.raed}))' this would be swallowed as well. I know it is possible to compress the multiline statements above into a single line by using semicolons, but it's better to avoid them as they decrease readability.

So my suggestion is to add something like the following syntax to Ruby:

  File.read("myfile.txt") rescue Errno::ENOENT, puts "No file there"

This way it is more concise than having to write five lines (instead of just one) and still reads good (as opposed to the semicolon trick). Maybe the syntax isn't ideal as the comma operator is already used elsewhere, but the general idea should be clear though.

Valete,
Marvin
=end



-- 
https://bugs.ruby-lang.org/

In This Thread