代码之家  ›  专栏  ›  技术社区  ›  James

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

  •  1
  • James  · 技术社区  · 16 年前

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

    • 你写下你所有的“功能性”吗? 先编码,然后返回并添加 错误处理还是相反?
    • 你认为你的用户有多蠢 是?
    • 你的颗粒度如何 异常抛出?

    有没有人有明智的建议,让这更容易传递?

    很多很好的答案,伙计们,谢谢。事实上,我在与用户打交道时得到的答案比我想象的要多。实际上,我更感兴趣的是后端的错误处理、处理数据库连接失败以及前端的潜在影响等。让他们继续前进!

    7 回复  |  直到 16 年前
        1
  •  7
  •   Noon Silk    16 年前

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

    尊重他们,不要以为他们了解你的系统,你是来帮助他们的。 他们 .

    关于第一部分,我通常会在当时编写大多数错误处理,稍后再添加一些内容。

    我一般不会抛出那么多的异常。

        2
  •  3
  •   Jason    16 年前

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

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

        3
  •  1
  •   ChrisLively    16 年前

    首先,也是最重要的,向用户清楚地了解您所期望的。第二,测试输入以验证它是否包含预期边界内的数据。

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

    解决方法是将标签改为简单地说“email”,然后测试输入。对于kicks,我们继续记录用户最初在该字段中键入的内容,以查看标签更改是否有帮助。是的。

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

        4
  •  1
  •   slugster Joey Cai    16 年前

    当我编写代码时,会出现一些我所期望的异常,例如文件可能丢失,或者某些XML序列化可能失败。我知道这些例外情况会提前发生,我可以为他们处理。

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

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

        6
  •  0
  •   Sapph    16 年前

    你必须假设你的用户是非常愚蠢的。总有人会找到一种方法给你输入你认为永远不会发生的信息。

    我尽量使异常抛出尽可能细化,以便在出现问题时提供最佳反馈。如果你把所有的东西都放在一起,你就无法分辨是哪个错误导致了这个问题。

    我通常先尝试处理错误案例(在获得功能代码之前),但这不一定是最佳实践。

        7
  •  0
  •   Ed Altorfer    16 年前

    有人已经提到 defensive programming . 不过,从用户体验的角度来看,有一些想法。

    • 如果用户的输入无效,可以(a)在您合理确定自己知道输入的含义的情况下更正输入,或者(b)显示消息 在线 这就告诉他们应该采取什么样的纠正措施。
    • 避免出现“致命的系统错误代码02382981”之类的信息。用户(a)不知道这意味着什么,即使您知道这意味着什么,以及(b)看到这样的事情会感到害怕和拖延。
    • 避免出现弹出消息,以防出现任何可能出现的错误。您不应该中断用户流,除非您绝对需要他们在做任何其他事情之前解决问题。
    • 日志,日志,日志。向用户显示错误消息时,根据所创建应用程序的类型,将可能有助于调试的相关信息放在(a)日志文件或(b)数据库中。这将减少搜索错误信息的工作,而不会让用户哭泣。

    一旦您确定了用户应该和不应该做什么,您就能够有效地编写错误处理代码。您可以使用助手方法/类使这一点更容易实现。

    关于在业务逻辑之前/之后/期间编写处理的问题,请这样考虑:如果您要制作400000个三明治,那么在同一时间添加所有芥末可能会更快,但也可能比单独制作每个三明治更无聊。谁知道呢,也许你真的喜欢芥末的味道…