Error handling 从例行程序中返回内容时的最佳实践

Error handling 从例行程序中返回内容时的最佳实践,error-handling,return-value,Error Handling,Return Value,从日常工作中返回某些内容的最佳做法是什么?我应该总是返回状态位还是仅在失败时返回状态位?例如: 失败时返回(0,“失败原因…”, 成功时返回(1,成功值,第二个成功值) 或 失败时返回(0,“失败原因…”, 成功时返回(成功值,第二个成功值) 我通常用Perl编程,但我想这个问题代表了我可能尝试用什么语言编程。谢谢 在支持它们的语言中,应该抛出描述性异常 如果适用,您应该抛出正确类型的异常(例如,ArgumentNullException或.Net中的InvalidOperationExcept

从日常工作中返回某些内容的最佳做法是什么?我应该总是返回状态位还是仅在失败时返回状态位?例如:

失败时返回(0,“失败原因…”,
成功时返回(1,成功值,第二个成功值)

失败时返回(0,“失败原因…”,
成功时返回(成功值,第二个成功值)


我通常用Perl编程,但我想这个问题代表了我可能尝试用什么语言编程。谢谢

在支持它们的语言中,应该抛出描述性异常


如果适用,您应该抛出正确类型的异常(例如,
ArgumentNullException
或.Net中的
InvalidOperationException

嘿,阿克斯,我过去也问过自己类似的问题

其中一些答案可能会对你有所帮助

我得出的基本结论是,如果打电话的人需要,我只会归还一些东西,任何东西


因此,在大多数情况下,我发现让我的方法无效更好,如果出现任何错误,让它抛出一个有意义的异常。如果一切顺利,那么作为打电话的人,我真的不在乎

答案取决于语言。你应该遵循你所使用的语言的习惯用法。您提到的Perl习惯用法是,成功时返回零(0),失败时返回其他值。如果您需要返回多个值,如示例中所示,其中一个值可能始终是成功/失败代码


如果您使用的语言支持异常(例如Java、C#、C++),那么您应该使用异常指示异常情况(例如失败)。如果例程正常完成(即没有异常),则可以假定它已成功,并且可以安全地使用任何返回值。

@dave我可以问一下,您从哪里获得了将0作为成功返回的Perl惯用法。因为我以前似乎见过成功返回1的Perl代码。我喜欢在我知道的情况下尝试使用最佳实践,如果你的建议是真的,我会改变这个习惯。我认为这已经嵌入到我的DNA中:)我想不出一个现成的引用,但我很确定它反映了Perl的Unix传统。我可以推荐谷歌吗。还有一种观点认为成功只有一种形式,失败有多种形式。因此,选择0表示成功,选择非零表示所有可能的失败是有意义的;如果没有争论,我们应该这样做。