私はrufus スケジューラを使用して、関数を呼び出して夜間のテスト スクリプトを実行しています。
ときどき、「スケジューラーが例外をキャッチしました:」というメッセージが表示され、関数の一部がスローされました。その後、スケジューラは次のテスト ケースの実行を停止します。
キャッチされた例外に関係なく、スケジューラーがすべてのテストケースを実行するようにするにはどうすればよいですか?
私はrufus スケジューラを使用して、関数を呼び出して夜間のテスト スクリプトを実行しています。
ときどき、「スケジューラーが例外をキャッチしました:」というメッセージが表示され、関数の一部がスローされました。その後、スケジューラは次のテスト ケースの実行を停止します。
キャッチされた例外に関係なく、スケジューラーがすべてのテストケースを実行するようにするにはどうすればよいですか?
これを「例外飲み込み」と呼びます。例外をインターセプトし、それに対して何もしません。
begin
# do some dangerous stuff, like running test scripts
rescue => ex
# do nothing here, except for logging, maybe
end
例外で何もする必要がない場合は、次を省略できます=> ex
。
begin
# do some dangerous stuff, like running test scripts
rescue; end
からサブクラス化されていない例外StandardError
をレスキューする必要がある場合は、より明確にする必要があります。
begin
# do some dangerous stuff, like running test scripts
rescue Exception
# catches EVERY exception
end
ブロックをメソッドに渡すことができるという事実を時々使用します。メソッドはエラーをレスキューし、コードはそのまま続行できます。
def check_block
yield
rescue NoMethodError => e
<<-EOR
Error raised with message "#{e}".
Backtrace would be #{e.backtrace.join('')}
EOR
end
puts check_block {"some string".sort.inspect}
puts check_block {['some', 'array'].sort.inspect}
この最初のブロックは通過し、レポートが返されてレスキューされます。2 番目のブロックは正常に動作します。
NoMethodError
このレスキューは、他のエラーをレスキューする必要がある場合にのみレスキューします。