[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>