From: alex@... Date: 2016-05-18T00:34:34+00:00 Subject: [ruby-core:75585] [Ruby trunk Feature#6739] One-line rescue statement should support specifying an exception class Issue #6739 has been updated by Alex Boyd. What's the problem with `then`? I'm getting a syntax error when I try it: ~~~ irb(main):002:0> foo rescue Bar then baz SyntaxError: (irb):2: syntax error, unexpected keyword_then, expecting end-of-input foo rescue Bar then baz ^ from /Users/aboyd/.rbenv/versions/2.1.2/bin/irb:11:in `
' ~~~ I don't believe there's anywhere `then` can appear without something like `if` leading into it, in which case the `then` would obviously belong to the `if`, like: ~~~ foo rescue if bar then Baz else Qux end blah ~~~ (which probably isn't actually advisable, but would be perfectly syntactically unambiguous.) ---------------------------------------- Feature #6739: One-line rescue statement should support specifying an exception class https://bugs.ruby-lang.org/issues/6739#change-58719 * Author: Marvin G��lker * Status: Feedback * Priority: Normal * Assignee: Yukihiro Matsumoto ---------------------------------------- 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: ~~~ruby begin File.read("myfile.txt") rescue Errno::ENOENT puts "No file there" end ~~~ Now it's possible to do this: ~~~ruby 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: ~~~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 -- https://bugs.ruby-lang.org/ Unsubscribe: