首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >异常与错误代码与断言

异常与错误代码与断言
EN

Stack Overflow用户
提问于 2009-09-07 09:00:26
回答 9查看 13.9K关注 0票数 20

我正在开发一个库来生成设备的报告。由于各种原因,generate_report (const std::string& no)成员函数可能会失败:

  1. 无效报告编号。
  2. 无效状态( report_generator是FSM)
  3. 没有设备处于活动状态。
  4. 报表生成过程中的错误

哪种错误处理机制最适合这些错误?

  • 只需返回truefalse
  • 返回错误码
  • 断言和日志
  • 抛出异常
  • 以上任何组合

一些上下文信息:正常的工作流如下所示。用户激活设备,从列表中选择报表,然后单击"generate“。

编辑:谢谢你到目前为止的回复!对我来说,现在很清楚什么时候使用断言,什么时候做错误处理。至于错误处理,错误代码和异常都有优缺点。我想我会选择异常(并为上面的错误创建四个类),但我还不太确信。我总是想到“意外情况”的例外情况。无效的报告no并不是真正出乎意料的。有什么建议吗?)

EN

回答 9

Stack Overflow用户

发布于 2009-09-07 09:18:49

其中任何一个都有不同的目的:

  • 错误代码。异常:异常和错误代码代表了如何处理结果代码的不同成语。异常更健壮--结果代码可以被忽略或丢失.库通常应该强烈区分抛出的异常位置/异常以及何时使用错误代码。充其量,只使用两种方法中的一种。
  • 返回truefalse:错误代码的专门化。通常情况下,最糟糕的想法--只有在没有好的或坏的报告的情况下才是好的(即malloc返回好的或坏的(= NULL) )。
  • 断言和日志:这些都是调试技术,不应该用作用户/客户端的报告机制。断言只是说“发生了什么事,我无法处理-我辞职了”。
票数 14
EN

Stack Overflow用户

发布于 2009-09-07 09:03:58

断言不是正确的选择。当你有一个不变量时使用断言;一些不应该发生的事情。不要做断言()之类的事情,如果参数是一个错误条件而不是一个不变量,那么它永远不会是空的。

如果是我,我将在接口中使用异常,如果必须的话,如果不使用异常,则通过内部使用的函数来翻译错误代码。在这方面要保持一致(不要为这些东西使用断言)。

票数 12
EN

Stack Overflow用户

发布于 2009-09-07 09:39:41

与真/假和错误代码相比,异常有几个重要的优点:

  • 异常不能被忽略。如果您的代码抛出异常,调用方必须捕获它以避免获得未处理的异常。
  • 异常可以在比直接调用者更高的级别处理。如果您使用错误代码,您可能最终会在应用程序的所有层都必须检查错误并将它们传递给调用方。

断言用于表示代码中的先决条件等内容,并有望在开发过程中发现任何bug。但是,您不应该依赖发布代码中的断言,而且出于性能原因,通常从发布代码中删除断言。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1388335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档