[ruby-core:93304] Re: [Ruby trunk Feature#15936] on_error in lieu of rescue, raise

From: Austin Ziegler <halostatue@...>
Date: 2019-06-21 18:54:12 UTC
List: ruby-core #93304
No, the `ensure` line is `job.fail! if $!`. That adds a conditional to the
`ensure`.

On Thu, Jun 20, 2019 at 3:17 PM <[email protected]> wrote:

> Issue #15936 has been updated by kylemacey (Kyle Macey).
>
>
> jeremyevans0 (Jeremy Evans) wrote:
> > kylemacey (Kyle Macey) wrote:
> > > What would be a thought on using another keyword that doesn't actuall=
y
> _rescue_ an exception, but performs an operation in the event of an error=
?
> Similar to `ensure`, but only in the event of an error.
> > >
> > > ```
> > > begin
> > >   some_method
> > > on_error StandardError
> > >   job.fail!
> > > end
> > > ```
> >
> > Thankfully, Ruby already supports what you want:
> >
> > ```ruby
> > begin
> >   some_method
> > ensure
> >   job.fail! if $! # or use case $! if you want to handle specific
> exception classes differently
> > end
> > ```
> >
> > As you can already accomplish this with current Ruby syntax, I do not
> think adding a keyword for it is warranted.
>
> `ensure` fires even if there is no exception. This keyword would only fir=
e
> when there is an exception. In your example, `job.fail!` would always be
> called.
>
> ----------------------------------------
> Feature #15936: on_error in lieu of rescue, raise
> https://bugs.ruby-lang.org/issues/15936#change-78754
>
> * Author: kylemacey (Kyle Macey)
> * Status: Open
> * Priority: Normal
> * Assignee:
> * Target version:
> ----------------------------------------
> A common bad pattern in ruby is to rescue any exception and accidentally
> clobber the exception.
>
> ```
> begin
>   some_method
> rescue StandardError
>   #
> end
> ```
>
> Most linters will complain if you write rescues like the code above.
> However, this could be useful if we want to perform an operation on _any_
> error, as long as we re-raise the exception after doing our work.
>
> ```
> begin
>   some_method
> rescue StandardError
>   job.fail!
>   raise
> end
> ```
>
> Here, though, we run the risk of potentially forgetting to reraise the
> exception, or having to make exceptions in our linter for an operation th=
at
> is overall benign.
>
> What would be a thought on using another keyword that doesn't actually
> _rescue_ an exception, but performs an operation in the event of an error=
?
> Similar to `ensure`, but only in the event of an error.
>
> ```
> begin
>   some_method
> on_error StandardError
>   job.fail!
> end
> ```
>
> (obviously, someone more creative than me should come up with a better
> name)
>
>
>
> --
> https://bugs.ruby-lang.org/
>
> Unsubscribe: <mailto:[email protected]?subject=3Dunsubscrib=
e>
> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>
>


--=20
Austin Ziegler =E2=80=A2 [email protected] =E2=80=A2 [email protected]=
a
http://www.halostatue.ca/ =E2=80=A2 http://twitter.com/halostatue

Unsubscribe: <mailto:[email protected]?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next