Questions tagged «exceptions»

例外是在应用程序过程中发生,需要偏离程序的正常流程。

2
异常的粒度
我和几个朋友之间进行了辩论。他们更喜欢一般性例外,例如作为例外的字段ClientErrorException并ServerErrorException有详细信息,而我更喜欢使事情更具体。例如,我可能有一些例外,例如: BadRequestException AuthenticationFailureException ProductNotFoundException 这些都是基于API返回的错误代码构建的。 遵循异常的优点,这对于Java来说似乎是惯用的。但是,我朋友的意见并不少见。 就代码可读性和API可用性而言,是否存在首选方法,或者它真的只是偏爱首选项?

2
我们需要验证整个模块的使用情况还是仅验证公共方法的参数?
我听说建议您验证公共方法的参数: 如果他不期望为空,是否应该检查为空? 方法是否应验证其参数? MSDN-CA1062:验证公共方法的参数(我具有.NET背景,但问题不是特定于C#的) 动机是可以理解的。如果将以错误的方式使用模块,则我们希望立即引发异常,而不是任何不可预测的行为。 令我困扰的是,错误的参数并不是使用模块时唯一的错误。这是一些错误情况,如果我们遵循建议并且不希望错误升级,则需要添加检查逻辑: 来电-意外参数 来电-模块处于错误状态 外部通话-返回意外结果 外部调用-意外的副作用(两次进入调用模块,破坏了其他依赖状态) 我试图考虑所有这些情况,并用一种​​方法(对不起,不是C#的人)编写一个简单的模块: public sealed class Room { private readonly IDoorFactory _doorFactory; private bool _entered; private IDoor _door; public Room(IDoorFactory doorFactory) { if (doorFactory == null) throw new ArgumentNullException("doorFactory"); _doorFactory = doorFactory; } public void Open() { if (_door != null) throw …

6
如果模型正在验证数据,那么是否应该在输入错误时抛出异常?
读这个SO问题,似乎不赞成抛出用于验证用户输入的异常。 但是谁应该验证这些数据呢?在我的应用程序中,所有验证都是在业务层完成的,因为只有类本身才真正知道哪些值对其属性中的每个属性都有效。如果我要将用于验证属性的规则复制到控制器,则验证规则可能会更改,并且现在有两个地方需要进行修改。 我以为应该在业务层上进行验证的前提是否错误? 我做的事 因此,我的代码通常最终如下所示: <?php class Person { private $name; private $age; public function setName($n) { $n = trim($n); if (mb_strlen($n) == 0) { throw new ValidationException("Name cannot be empty"); } $this->name = $n; } public function setAge($a) { if (!is_int($a)) { if (!ctype_digit(trim($a))) { throw new ValidationException("Age $a …

5
“编程错误”例外-我的方法是否正确?
我目前正在尝试改善对异常的使用,发现了在表示编程错误的异常(例如,有人将null作为参数传递,或在对象被处置后调用方法)与在编程中指示失败的异常之间的重要区别。不是调用者的错误的操作(例如,I / O异常)。 这两种例外应如何区别对待?您是否认为需要明确记录错误异常,还是足以记录相关的前提条件?并且您是否可以忽略前提条件或错误异常的文档(如果它很明显)(例如,ObjectDisposedException在处置对象上调用方法时)
9 java  c#  c++  exceptions 

2
在异常之后使用else(或不使用)
考虑一下这段代码: if (x == 1) { throw "no good; aborting" ; } [... more code ...] 现在考虑以下代码: if (x == 1) { throw "no good; aborting" ; } else { [... more code ...] } 这两种情况的工作方式完全相同。第一种情况的优点是您不必将其余代码“括入”中else。第二个优点是遵循显式具有elsefor每个的实践if。 任何人都可以提供任何有力的论据来支持一个胜于另一个吗?

8
最终尝试使用(无捕获)vs枚举状态验证
我一直在阅读有关此问题的建议,即应如何在尽可能接近引发异常的地方处理异常。 我对最佳做法的两难选择是,是否应该使用try / catch / finally返回一个枚举(或一个表示值的int,0表示错误,1表示ok,2表示警告等,视情况而定),以便一个答案总是有序的,还是应该让异常通过,以便调用方可以处理它? 据我所知,根据具体情况,这可能会有所不同,因此最初的建议似乎很奇怪。 例如,在Web服务上,您总是希望返回一个状态,因此必须当场处理任何异常,但是可以说在通过http发布/获取某些数据的函数中,您希望例外(例如404情形)传递给触发它的人。如果不这样做,则必须创建某种方式来告知调用方结果的质量(错误:404)以及结果本身。 尽管可以在获取/发布数据的帮助程序函数中尝试捕获404异常,但是应该吗?难道只有我一个人使用smallint表示程序中的状态(并适当地记录它们),然后将此信息用于外部的健全性验证(一切正常/错误处理)吗? 更新:我期待主要分类出现致命/非致命的异常,但是我不想包括该异常,以免影响答案。让我澄清一下问题所在:处理引发的异常,而不是引发异常。预期的效果是:检测到错误,然后尝试从中恢复。如果无法恢复,请提供最有意义的反馈。 同样,对于http get / post示例,问题是,是否应该提供一个新对象来描述原始调用者发生了什么?如果此帮助程序在您正在使用的库中,您是否希望它为您提供操作的状态代码,还是将其包含在try-catch块中?如果您正在设计它,您是否会提供状态代码或引发异常,然后让上级将其转换为状态代码/消息? 简介:您如何选择一段代码而不是产生异常,而是返回状态代码以及可能产生的任何结果?

2
如何调试不容易重现且仅在生产环境中发生的异常?
我正在处理一个例外,该例外仅在我们的生产环境中发生。我无权访问这些环境,也不知道此异常的含义。查看错误说明,我无法理解原因。 javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure 有人可以建议我如何解决这种问题吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.