Bri*_*ian 3 ruby ruby-on-rails sinatra
在Ruby中使用特定的代码库时,我经常发现自己不知道要解救什么异常.
例如,我经常使用HTTParty来处理我的rails/sinatra app会发出的任何HTTP请求.我挖掘了HTTParty的代码,发现了一个包含已定义的异常的文件.大!我会在提出请求时拯救他们.
为了测试它,我为请求输入了一个虚假的域名,但我没有预期的HTTParty :: ResponseError异常,而是得到了一个SocketError异常.
处理这个问题的最佳方法是什么?我知道HTTParty是Ruby实现的包装器,这可能是抛出SocketError异常的原因.但我怎么知道呢?
我可以通过拯救"异常"来解决这个问题,但这是非常糟糕的做法.我宁愿清楚我可能造成的异常并处理这些异常.
编辑:我应该澄清,真正促使我创建这个问题的是我不知道如何能够找出在调用特定函数时可能引发的异常...也就是说,无需查看每个函数调用在堆栈中.
一般来说(我不是红宝石程序员)我使用以下方法.
我通过以下方式处理异常:
我可以从中恢复吗? 如果异常可能发生,我知道我可以恢复或重试,那么我处理异常.
是否需要报告? 如果异常可能发生,但我知道我无法恢复或重试,那么我通过记录它然后将其传递给调用者来处理异常.我总是在自然子系统边界上执行此操作,如主要模块或服务.有时(依赖于API)我可能会使用"my module"特定的异常包装异常,以便调用者只处理我的异常.
无法处理吗?所有未处理的例外情况应在最高级别进行,并且(a)报告,(b)确保系统保持稳定和一致.无论其他两个是否完成,这都应该始终存在.
当然还有另一类例外 - 那些非常严重的例外,它们没有机会处理它们.对于这些只有一个解决方案-Post Mortem调试,我发现最好的事情是日志,日志和更多日志.在从小到大的许多系统上工作,我宁愿牺牲性能来获得稳定性和可恢复性(除非它是关键的)并添加大量的日志记录 - 如果可能的话也会内省.
| 归档时间: |
|
| 查看次数: |
481 次 |
| 最近记录: |