github / github/scientist

All exceptions — including signals — are caught during an observation

Open
#60 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Ruby
Stars
7.8k
Forks
505
PR merge metrics
No merged PRs in 30d

Description

`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).

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.