How to catch raised exception in rake task
我有一个rake任务循环遍历CSV文件中的行,并且在该循环内部,有一个开始/救援块来捕获任何可能引发的异常。 但是当我运行它时,它一直在说"耙子流产!" 它没有进入救援区
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | CSV.foreach(path, :headers => true) do |row| id = row.to_hash['id'].to_i if id.present? begin # call to mymethod rescue => ex puts"#{ex} error executing task" end end end ... def mymethod(...) ... begin response = RestClient.post(...) rescue => ex raise Exception.new('...') end end |
预期:它应该完成循环CSV的所有行
实际结果:在达到"加注"异常后停止说:
rake aborted!
Exception: error message here
...
Caused by:
RestClient::InternalServerError: 500 Internal Server Error
您可以使用
1 2 3 4 5 6 7 8 9 10 | CSV.foreach(path, :headers => true) do |row| id = row.to_hash['id'].to_i if id.present? begin method_which_doing_the_staff rescue SomethingException next end end end |
并在您的方法中引发异常:
1 2 3 4 5 | def method_which_doing_the_staff stuff ... raise SomethingException.new('hasd') end |
我只是通过评论引发异常的行解决了这个问题,因为它似乎是现在最快的修复。
1 | # raise Exception.new('...') |
如果有更好的方法,我仍然愿意接受其他建议。