在编写引发我询问的异常的代码时 这里, ,我读到了消息的结尾,并在标点符号处停了下来。我意识到我抛出的几乎每个异常消息都可能有一个!某处。

throw new InvalidOperationException("I'm not configured correctly!");
throw new ArgumentNullException("You passed a null!");
throw new StupidUserException("You can't divide by 0!  What the hell were you THINKING???  DUMMY!!!!!");

您在撰写异常消息时采用什么语气?在查看日志时,您是否发现某种特定类型的消息实际上比其他类型更有帮助?

有帮助吗?

解决方案

系统消息中的对话音使得软件看起来不专业且不马虎。感叹号,侮辱和俚语在抛光异常消息中确实没有位置。

此外,我倾向于在Java中使用不同的样式来处理运行时异常和检查异常,因为运行时异常是针对造成错误的程序员的。由于运行时异常可能会显示给最终用户,因此我仍然“保持清洁”。但他们可能会更加简洁和神秘。检查的异常消息应该更有帮助,因为如果您描述它可能是用户可以解决问题(例如,找不到文件,磁盘已满,没有到主机的路由等)。

在缺少信息例外的特定字段的情况下,有一件事是有用的:违规数据:

throw new IndexOutOfBoundsException("offset < 0: " + off);

其他提示

事实上。包括调试时可能需要的所有信息,但不多于此。

我唯一一次在异常消息中包含感叹号,如果它表明某些事情确实发生了奇怪的事情。大多数错误不是非常奇怪,只是环境不正确,用户错误或简单的编程错误的产物。

我尝试反映我编码的框架的语气,语法和标点符号样式。你永远不知道其中一条消息何时可能真正在客户或用户面前出现,所以我保持一切专业,非评判性和具体到足以进行故障排除 - 没有具体到放弃任何安全问题。代码。

我在所有字符串(UI和异常)中都避免使用感叹号,例如瘟疫,除了(偶尔)在我的单元测试中。

承担责任,即使确实是用户的错,也是我见过的最佳选择。

“我找不到你想要的文件,你会检查我是否正确使用了这个文件?”或者“出了点问题。不知道什么,但我能解决的唯一方法就是停下来。请重启我。“

简洁,详细和少量冗余信息(即ArgumentNullException显然涉及null)。

但这是我读过的最好的一段时间,首先回答

我不会过多使用感叹号。他们表达了太多,想一想“驱动器中没有磁盘!”可以读为“驱动器中没有磁盘,您疯狂的用户”。 )

我认为抛出包含国际化文本的异常是明智的。您永远不知道谁会使用您的代码、捕获您的异常并向用户显示文本。那么那就是:

throw new MagicalException(getText("magical.exception.text"));

我还建议在抛出异常时包装底层异常(如果有的话)。它确实有助于调试。

不要认为用户不会看到运行时异常。如果您正在记录到文件附加程序,一些好奇的用户可能会打开日志并查看您的文件 肮脏的 秘密。

我发现最有帮助的消息提供:

  • A 格式一致 这让你很容易理解他们在告诉你什么。
  • A 时间戳, 这样您就可以感受到程序的动态。
  • A 简洁总结 的错误。如果您提供技术支持,请添加 错误代码 以便快速识别。
  • 一个 解释出了什么问题, 区分一个 用户输入无效 和一个 编码错误。
  • 详细资料, , 包括 代码行 或者 价值观 涉及。

最重要的是:

  • 他们告诉用户如何解决问题。

例子:

Error 203 (Timeout) in commit.c line 42:
Unable to save salary data for user 'Linus' to database at '10.10.1.21'
after 1500ms.  Verify database address and login credentials.

最难学到的教训之一是,用户对代码内部的兴趣远不如他们对代码内部的兴趣。 完成他们的工作。 让他们尽可能轻松地完成工作,您就为您的软件增加了巨大的价值。

我倾向于将异常消息自己处理成异常。例如。 file_not_found应该说“找不到文件”。只有在用户无法弄清楚的情况下才应包含特定数据;在这种情况下,用户知道文件名,所以我不添加该数据。格式化可以通过任何必要的输出信息来完成,所以我尽量使它们尽可能友好地重新格式化。

礼貌,简洁,简洁,具体。通常,在消息中包含状态值是有帮助的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top