11

私はrufus スケジューラを使用して、関数を呼び出して夜間のテスト スクリプトを実行しています。

ときどき、「スケジューラーが例外をキャッチしました:」というメッセージが表示され、関数の一部がスローされました。その後、スケジューラは次のテスト ケースの実行を停止します。

キャッチされた例外に関係なく、スケジューラーがすべてのテストケースを実行するようにするにはどうすればよいですか?

4

2 に答える 2

15

これを「例外飲み込み」と呼びます。例外をインターセプトし、それに対して何もしません。

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
于 2012-11-25T22:46:22.140 に答える
2

ブロックをメソッドに渡すことができるという事実を時々使用します。メソッドはエラーをレスキューし、コードはそのまま続行できます。

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このレスキューは、他のエラーをレスキューする必要がある場合にのみレスキューします。

于 2012-11-25T23:11:11.527 に答える