All exceptions — including signals — are caught during an observation #60
Description
observation.rb
does this:
def initialize(name, experiment, &block)
...
begin
@value = block.call
rescue Object => e
@exception = e
end
...
end
Which is a well documented anti-pattern. In particular, it means that any signals (eg. <SignalException: SIGTERM>
) 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 <TypeError: exception class/object expected>
or a <RuntimeError: Some string>
.
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).