最好在Ruby中的参数错误中abort()或raise()?

And*_*lus 2 ruby raise abort

我正在Ruby中编写一个命令行实用程序,并编写检查参数组合是否有效的逻辑.如果我发现错误,如果我不打算恢复,那么引发ArgumentError与现场调用abort()的优势是什么?一般情况下,如果没有计划尝试恢复,何时提出异常而不是中止?我假设异常路由是可取的,需要某种优雅的关闭,而不是简单地回退到命令行.

nne*_*neo 6

总是,总是提出异常而不是中止.流产是丑陋的,如果你真的无法继续下去,那么你真的是最后的手段.

您可以在以下后继续ArgumentError:您可以告诉用户正确的语法是什么,您可以打印帮助消息.或者,稍后您可以在另一个可以处理错误的项目中重用参数解析器.(实际上,常见的习惯用法是在异常块中调用参数解析器,如果参数解析器引发错误,则打印出帮助消息).

在任何情况下,默认行为ArgumentError类似于中止,但您可以使用它做更多.因此,在我看来,你应该采用这种更灵活的解决方案.

  • @AndreasYankopolus:当输入无效的命令行时,大多数实用程序都显示用法消息(可能不是完整的帮助).这是为了礼貌用户,以帮助他们记住如何使用命令. (2认同)