Exception handling 动态异常消息是个好主意吗?

Exception handling 动态异常消息是个好主意吗?,exception-handling,verbosity,Exception Handling,Verbosity,我正在为一个项目设计一个基础设施,我一直在想,用参数格式化异常消息是否是一个好主意,使其成为动态的 这意味着,一方面,异常消息可能非常冗长 在我看来,不利的一面要强烈得多,那就是你不能期待某些信息。这些可以用于异常处理、测试消息是this还是that以及日志记录中(尽管这不是最佳实践)。但更令人不安的是,如果你想在某个地方展示这条信息(我就是这么做的),本地化就会变得更加困难 所以我的问题是你对它有什么看法,你是否有一个折衷的解决方案,让我既有详细性(万一我记录了异常)又有一致性 谢谢。我认为在

我正在为一个项目设计一个基础设施,我一直在想,用参数格式化异常消息是否是一个好主意,使其成为动态的

这意味着,一方面,异常消息可能非常冗长

在我看来,不利的一面要强烈得多,那就是你不能期待某些信息。这些可以用于异常处理、测试消息是this还是that以及日志记录中(尽管这不是最佳实践)。但更令人不安的是,如果你想在某个地方展示这条信息(我就是这么做的),本地化就会变得更加困难

所以我的问题是你对它有什么看法,你是否有一个折衷的解决方案,让我既有详细性(万一我记录了异常)又有一致性


谢谢。

我认为在异常中包含参数通常非常有用。想想其他开发人员(以及您自己)会阅读该消息并试图找到一个bug。甚至更糟糕的是:用户可能会读到一条异常消息给你,或者将其发布在论坛上,而你必须远程找出问题所在

在异常中测试某些消息确实不是最佳实践。我称之为坏习惯。我知道的所有语言都允许您定义我们自己的异常类,如果纯类名对您来说不够好(尽管通常是这样),还可以向类添加自定义属性。我相信异常中的消息应该尽可能让人可读,并且不需要代码来预测它们


当然,你什么都可以做过头。异常消息不应该因为希望包含所有可能的变量而变得太大/太长。明智地选择;-)

我在MSDN的某个地方读过这篇文章,那里的某位著名异常专家说,为异常创建自己的层次结构是一种不好的做法。他说,在他看来,.NET已经定义了太多的自定义异常,在大多数情况下,指定一条消息就足够了。然而,问题仍然是,本地化怎么办?我想将字典键作为消息发送给异常,就像在内部.NET中那样。好吧,说实话,我从来没有本地化过我的异常。他们总是简单的英语。但是通常有一些东西,比如java中的消息格式(
参数{1}在{2}是不好的
),以及.NET中的任何替代方法。我想这是一条路。(顺便问一下,如果你使用字典键,谁来解析它们??)。是的,对于默认内容(invalidParameterException等,不要重新编码),使用.NET附带的异常,但是对于默认内容未涵盖的内容:我认为最好创建自己的异常。我的看法。@Yam:从一个引人注目的角度来看,大多数.net异常都是毫无用处的。一个有用的异常层次结构不需要像.net的层次结构那么多异常,但需要定义系统状态的哪些方面受到干扰。在许多情况下,考虑到.net层次结构,我所能看到的最佳方法是捕获最常见的异常并将其包装,就像在描述对系统状态的影响的异常中一样,并希望得到最好的结果。