All exceptions — including signals — are caught during an observation
- Vorherrschende Sprache
- Ruby
- Sterne
- 7.8k
- Forks
- 505
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
`observation.rb` does this:
```ruby
def initialize(name, experiment, &block)
...
begin
@value = block.call
rescue Object => e
@exception = e
end
...
end
```
Which is a [well](http://daniel.fone.net.nz/blog/2013/05/28/why-you-should-never-rescue-exception-in-ruby/) [documented](http://www.mikeperham.com/2012/03/03/the-perils-of-rescue-exception/) [anti-pattern](https://robots.thoughtbot.com/rescue-standarderror-not-exception). In particular, it means that any signals (eg. ``) will be treated as-if they were just an error in the candidate code (which usually means logging and ignoring).
Note: There's no difference between `rescue Object` and `rescue Exception` because raising a non-exception (eg. a string) will either raise a `` or a ``.
I think the standard pattern — `rescue StandardError` — is correct here. That will catch everything except `SignalException`s and other things which aren't meant to be dealt-with as part of standard error handling.
Although users could filter-out all non-StandardError Exceptions themselves, this feels like a footgun (since signals will be relatively rare — especially in development — most users won't notice any problems until they happen in production).
Beitragsleitfaden
Bewertung
Dieses Issue wurde noch nicht bewertet.