[ruby-core:93287] [Ruby trunk Feature#15936] on_error in lieu of rescue, raise
From:
shout@...
Date:
2019-06-20 19:18:34 UTC
List:
ruby-core #93287
Issue #15936 has been updated by kylemacey (Kyle Macey). duerst (Martin D=FCrst) wrote: > kylemacey (Kyle Macey) wrote: > = > > This is coming from a need that I personally face often on the utilitie= s I work on, where I need to update state on an object if something unexpec= ted happens. My company's linter gets upset when I use the `rescue Standard= Error` pattern, so I was hoping to have a way to be more explicit that I'm = not trying to prevent the error from going up the stack, I just want to act= upon the exception. > = > What about getting the linter to recognize that you are using `raise` aga= in in the `rescue` clause? That shouldn't be too difficult, at least for th= e simple cases. Very true! I can certainly do that, I just thought this might have the adde= d benefit of writing more explicit and intentional code, and would eliminat= e the need to re-raise the exception. ---------------------------------------- Feature #15936: on_error in lieu of rescue, raise https://bugs.ruby-lang.org/issues/15936#change-78755 * Author: kylemacey (Kyle Macey) * Status: Open * Priority: Normal * Assignee: = * Target version: = ---------------------------------------- A common bad pattern in ruby is to rescue any exception and accidentally cl= obber the exception. = ``` begin some_method rescue StandardError # = end ``` Most linters will complain if you write rescues like the code above. Howeve= r, 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 exce= ption, or having to make exceptions in our linter for an operation that is = overall benign. What would be a thought on using another keyword that doesn't actually _res= cue_ an exception, but performs an operation in the event of an error? Simi= lar 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=3Dunsubscribe> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>