什么时候使用错误代码?

时间:2010-05-08 02:34:26

标签: c# java exception-handling error-handling error-code

在支持异常对象(Java,C#)的语言中,何时使用error codes是否合适?在典型的企业应用程序中使用错误代码是否合适?

许多众所周知的软件系统都使用错误代码(以及相应的错误代码参考)。一些示例包括操作系统(Windows),数据库(Oracle,DB2)和中间件产品(WebLogic,WebSphere)。错误代码提供哪些好处?使用错误代码有什么缺点?

10 个答案:

答案 0 :(得分:14)

WITHIN 程序应始终使用异常而不是错误代码。但是,异常不能传播到程序之外。每当错误必须离开程序时,您将收到错误消息或错误代码。

对于简单的事情,总是人为操作的错误消息没有代码是好的。如果没有给出错误代码,您可以说“找不到文件”。但是,如果它可能是另一端的另一台计算机,那么您应该另外提供错误代码。当您将其更改为“File< x> not found”时,您不希望破坏其他系统。

答案 1 :(得分:9)

我认为除了 一个 情况外,我曾经在.Net中使用过错误代码 - 当我创建一个我知道的控制台应用程序时从另一个应用程序调用。这个其他应用程序必须知道控制台应用程序何时失败,以及出了什么问题。因此,当你知道你的程序将被其他程序调用时,你需要一种结构化的方式让他们理解错误。

那就是说,我当时是.NET的新手,从那时起就从未使用过错误代码。

作为一个侧面说明,作为Windows的人,很高兴能够填写错误代码并提出知识库文章,所以错误代码结合良好的文档和找到它的能力=从你的用户。

答案 2 :(得分:7)

Web服务接口很常见。返回带描述的代码非常简单和标准。

我同意大部分情景是老派

我认为最大的缺点是代码质量。您必须添加更复杂的逻辑来管理错误代码,同时冒泡异常而不必使用方法参数或返回值。

您还必须添加“IF”以检查返回的代码是否为SUCCESS,而异常直接转到错误处理块。

答案 3 :(得分:5)

我是堆叠溢出的新手,但是......

我认为错误代码倾向于用于处理错误情况,这些情况需要最终用户参与纠正某种情况。如果您的代码由另一个开发人员维护,则异常是可行的方法。但是,在出现问题的情况下:

  • 在您的应用程序正在运行的环境中

  • 您的应用与其他实体(网络服务器,数据库,套接字等)之间的通信

  • 设备或设备驱动程序是否指示(可能是硬件故障?)

然后错误代码可能有意义。例如,如果您的应用程序试图代表您的最终用户登录数据库,但是数据库无法进行身份验证(数据库处于脱机状态,电缆已拔下),则错误代码/描述组合可能有助于结束 - 用户纠正问题。

再次在开发人员/工程师级别,他们将能够触摸源代码(传统的调试和测试技术)并对其进行修改,使用异常。

希望这会有所帮助......

- jqpdev

答案 4 :(得分:4)

当需要将错误传达给用户时,我经常使用错误代码,因为它们可以被国际化。例如,在编译器中,如果用户代码中存在错误,则可以在编译器后端发出错误信号,而前端可以将它们本地化为特定于文化/语言的字符串以供用户使用。然而,枚举可能比原始整数更好。

我还使用它们为应用程序创建“错误报告”框架。抛出异常时,会抛出错误代码,当异常冒泡时,会将错误代码(带有日志)发送到中央服务器。代码帮助组织数据库,以便我们可以检查与特定错误相关的日志。

最后,正如其他几个答案中所提到的,错误代码很容易与谷歌无关(想想Windows错误代码/ MS知识库文章),所以错误代码描述了什么出错可能对技术产品的最终用户更好。

错误代码的想法很有用,但IMO它们属于异常成员或IErrorReporter接口的参数,或者比方法返回值更多的东西。

答案 5 :(得分:2)

错误代码是老派。它们几乎没有任何价值。

错误代码唯一可能的值是它可以识别非常特定的情况。您可以为代码库中的每个点都有一个可以抛出异常的代码。这将使您能够非常精确地缩小问题的范围。

但是没有人关心这种程度的细节。谁想要保持如此混乱。它将为您留下代码,这些代码意味着“条件A和B,但由于状态S而不是C”。尝试弄清楚这意味着什么,这比努力更值得努力。堆栈跟踪在告诉您程序中问题发生的位置时更有价值。

我学会了在异常是一种普遍的技术之前对计算机进行编程。我很所以很高兴我们得到了例外!

答案 6 :(得分:2)

C#,也可能是Java,支持更好的异常处理控制流,即finally关键字,它使事情比使用错误代码更好。异常对象可以包含任何级别的详细信息,当然不仅仅是错误代码。所以异常对象更实用,但是你可能遇到一个不常见的情况,错误代码会更合适。

FWIW,C ++也支持异常对象。我不认为C ++支持finally关键字(虽然可能是更新的C ++ whatevers),但在C ++中你还必须避免像在catch处理程序中返回一样。

答案 7 :(得分:1)

错误代码是在一个时代设计的,其中函数告诉调用者出错的唯一方法是为可以返回的那些值的一个或多个值分配特殊含义,并且通常只有本机整数或者可以返回那个特殊值。

例如,在C中,“get character”例程返回ASCII中的下一个字符值,但如果由于某种原因出错则返回负值。然后,您负责以某种方式返回您的调用者,以便可以处理此错误情况,并且必须返回等。

异常机制是处理这种情况的一种优雅方式“这是一种紧急情况,我们必须从代码返回,直到可以处理问题”。错误代码不如此。

答案 8 :(得分:0)

我编写了许多其他(远程)应用程序使用的Web服务。当一个请求出现问题时,客户或多或少会坚持要求获取代码,这样他们就不必进行一些可怕的字符串比较来找出问题所在。

将HTTP结果代码作为此类行为的一个很好的示例。 “200”意味着快乐,“300”意味着任何一种方式,“400”或“500”意味着开始吓坏了。

答案 9 :(得分:0)

错误代码适用于您希望将其发送给用户的情况。如果没有,请使用例外。