github / github/scientist

All exceptions — including signals — are caught during an observation

Offen
#60 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
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

Beitragsleitfaden öffnen

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.