编写错误处理的好方法是什么?

时间:2010-01-05 22:27:35

标签: exception exception-handling error-handling

我讨厌编写错误条件代码。我想我没有一个好的方法来做到这一点:

  • 你写的所有'功能'吗? 代码首先然后返回并添加 错误处理,反之亦然?
  • 你认为你的用户多么愚蠢 是?
  • 你做多少粒度 异常抛出?

有没有人有传统的建议让这更容易?

很多很棒的答案,谢谢。实际上我得到的关于处理用户的答案比我想象的要多。我实际上对后端的错误处理更感兴趣,处理数据库连接失败和前端的潜在影响等。让他们来吧!

7 个答案:

答案 0 :(得分:7)

我可以回答一个问题:您不需要假设您的用户“愚蠢”,您需要帮助他们使用您的应用程序。显示好的提示,验证数据并解释原因,所以对他们来说很明显,如果你不能处理他们已经完成的事情(或者更具体地说,你让他们做了什么),不要让他们崩溃,显示一个很好的页面,解释他们可以做什么,等等。

尊重他们,并且不要假设他们了解您的系统的所有内容,而是在这里帮助他们

关于第一部分;我当时通常会编写大多数错误处理,稍后再补充一点。

我通常不会抛出那么多例外。

答案 1 :(得分:3)

假设您的用户不知道任何事情,并且会以任何可能被破坏的方式破坏您的系统。

然后相应地编写错误处理代码。

答案 2 :(得分:1)

首先,最重要的是,向用户明确您的期望。其次,测试输入以验证它包含您期望的边界内的数据。

Prime示例,我有一个带有电子邮件字段的表单。我们没有立即使用这些数据,所以我们没有对它进行任何检查。结果:大约1%的用户输入了他们的家庭住址。该字段标记为“电子邮件地址”显然用户只是阅读第二个单词并忽略第一个单词。

修复方法是将标签更改为简单地说“电子邮件”,然后测试输入。对于踢,我们继续并记录用户最初在该字段中输入的内容,以查看标签更改是否有帮助。它确实。

此外,作为一般惯例,您的函数应测试输入以验证它们包含您期望的数据。以您选择的语言使用断言或其等价物。

答案 3 :(得分:1)

当我编码时,会出现一些我期望的异常,即文件可能丢失,或某些xml序列化可能会失败。我知道的那些例外会提前发生,我可以为他们处理。

有很多你无法预料到的,你也不应该尝试。放入一个全局错误处理程序和记录器,以便最终捕获和记录所有内容。然后,当您的测试人员和/或用户发现导致异常的情况(即输入错误)时,您可以决定是否要专门为其进行进一步处理,或者保留原样。

摘要:验证您的输入,但不要试图过多注视水晶球,因为您永远不会预料到用户可能会遇到的每个问题。拥有一个全局处理程序和记录器,然后根据需要进行优化。

答案 4 :(得分:0)

答案 5 :(得分:0)

你必须假设你的用户非常愚蠢。有人总能找到一种方法来为您提供您认为永远不会发生的输入。

我尝试尽可能地使我的异常抛出,以便在出现问题时提供最佳反馈。如果将所有内容整合在一起,则无法判断哪个错误情况会导致问题。

我通常会先尝试处理错误情况(在获取功能代码之前),但这不一定是最佳做法。

答案 6 :(得分:0)

有人已提到defensive programming。但是,从用户体验的角度来看,有一些想法。

  • 如果用户的输入无效,或者(a)如果您确定自己知道他们的意思,或者(b)显示排队的消息,告诉他们他们采取了哪些纠正措施,请更正应采取。
  • 避免使用“FATAL SYSTEM ERROR CODE 02382981”等消息。用户(a)不知道这意味着什么,即使你这样做,(b)通过看到这样的事情而被吓倒和推迟。
  • 避免弹出可能出现的每一个可能错误的弹出消息。除非您绝对需要它们才能解决问题,否则不应该中断用户流程。
  • 日志,日志,日志。当您向用户显示错误消息时,根据您正在创建的应用程序类型,将可能有助于您调试的相关信息放入(a)日志文件或(b)数据库中。这将有助于在不让用户哭泣的情况下搜索有关错误的信息。

一旦确定了用户应该和不应该做的事情,您就能够有效地编写错误处理代码。您可以使用辅助方法/类使自己更容易。

关于在业务逻辑之前/之后/期间编写处理的问题,请以这种方式思考:如果你要制作400,000个三明治,那么同时添加所有芥末可能会更快,但它可能更快也比单独制作每个三明治更无聊。谁知道,也许你真的很喜欢芥末的味道......