Language agnostic 处理所有异常的正确时间

Language agnostic 处理所有异常的正确时间,language-agnostic,exception-handling,exception,try-catch,Language Agnostic,Exception Handling,Exception,Try Catch,到目前为止,我已经做了一些项目,我注意到我所写的每一个项目都完全没有任何异常处理,然后在最后我做了很多测试并处理了它们 是这样吗?我在测试时遇到了成千上万的异常(我马上就解决了),如果我处理了它,我就看不到它的确切位置(不使用断点或在任何地方显示它..但这似乎不太实际),所以我通过检查任何异常来解决问题,然后在最后,我无论如何都会处理任何可能逃逸的异常(当然) 你们呢?你们什么时候处理异常?我想说这是向后的(但很常见) 您可能希望研究测试驱动开发和测试先行设计 提示:考虑一种行为,编写代码对其进

到目前为止,我已经做了一些项目,我注意到我所写的每一个项目都完全没有任何异常处理,然后在最后我做了很多测试并处理了它们

是这样吗?我在测试时遇到了成千上万的异常(我马上就解决了),如果我处理了它,我就看不到它的确切位置(不使用断点或在任何地方显示它..但这似乎不太实际),所以我通过检查任何异常来解决问题,然后在最后,我无论如何都会处理任何可能逃逸的异常(当然)


你们呢?你们什么时候处理异常?

我想说这是向后的(但很常见)

您可能希望研究测试驱动开发和测试先行设计


提示:考虑一种行为,编写代码对其进行测试,然后将其添加到应用程序中。

就我个人而言,我总是定义一个适用于应用程序类型的全局未处理异常管理器,并将该日志和电子邮件异常发送给我的开发团队。在QA期间,我们将开始向具有可预测性的例程添加特定异常管理(和可恢复的)问题。在任何可能的情况下,我们都会添加防御性编程代码,以便根本不会发生异常。(如果您可以在尝试可能失败的代码之前进行测试,则无需捕获异常。)


我的应用程序往往以大量防御代码结尾(应该从一开始就内置)只有一些特定的异常处理。

< P>我更喜欢测试驱动开发。如果有一个预期的错误条件,然后对它进行测试。如果一个意外的错误出现,对它进行测试,然后修复它。

< P>我肯定会考虑在开发每个接口和模块时抛出的异常。

通过这种方式,您可以测试它们是否被可靠地抛出(当您期望时,而不是当您不期望时)。然后,可以编写使用这些组件的组件,以了解这些异常并进行处理(或者不按照它们的要求)


在我看来,您似乎忽略了正在开发的组件的某些功能。实际上,我将始终测试正确的功能和异常情况,以尽可能早地涵盖尽可能多的场景。

对此问题的答案是非常清楚的“视情况而定”

您需要查看具体情况;是否在特定代码段中抛出异常,从而可以恢复或处理导致抛出异常的“异常”情况?在这种情况下,是的,捕获异常并在该级别处理它


另一方面,您是在谈论不可恢复的错误吗?那么当然,在更全局的级别上捕获它们,或者根本不捕获它们(即如果您对异常无能为力,为什么要捕获它?)

捕获异常的规则通常是:在哪里可以有意义地处理异常。

有时这取决于技术或目标平台。我通常更喜欢处理所有异常的异常处理层。每个代码块都在try-catch块内


底线是,操作系统或程序或代码之外的任何其他实体都不应捕获任何异常。

与从API返回错误代码相比,异常的美妙之处在于,您不必检查代码中每一层的异常。您可以捕获特定的异常,以确定特定的错误条件和HAP处理错误或重新引发更合适的异常。您还必须在应用程序中捕获高级别的异常,以避免未处理的异常


需要注意的一点是,通常异常的用户是开发人员,而不是最终用户。后者通常不了解异常的技术细节。

我所看到的最常见的事情是开发人员有意识地选择处理异常的级别,并允许抛出异常。通常情况下,它将在工作线程的级别,或高级别的业务逻辑。允许异常发生,并有一个全面的方法来处理/记录异常,保护用户不受异常影响

时间安排是通常发生的事情和您所做的事情之间的唯一区别。从一开始就在应用程序中计划时间安排,并在高层进行异常处理


修复特定异常是通过您在出现问题时修复异常的方法来完成的。有时我使用的库将不必要地使用异常来传递信息,并且我将围绕对该库的所有调用添加专门的异常处理。通常我会在一个包装类中执行此操作,该类会隐藏实现和异常处理我的应用程序的其余部分。

开放式问题应该是社区Wiki。此外,你应该清楚地说明你是否有一种语言。否则,将其标记为语言不可知。你“抓住它”因此,如果可能的话,您可以尝试负责任地崩溃。当然,在某些情况下,应用程序可能处于过于混乱的状态,甚至懒得尝试。如果有能力“负责任地崩溃”然而,我仍然认为,在这种情况下,可以处理异常情况。但是,像内存异常这样的事情不能可靠地处理(处理代码可能会导致同样的问题再次发生)。这就是为什么我认为“不可恢复”错误。同意。我更喜欢文档(XML注释)。在可能的情况下可以由方法引发的异常。我在编程期间做过类似的事情。如果我错了,请告诉我。当从外部源接收一些数据时,在使用它之前测试它是否为空,然后使用所需的预防措施是防御代码的一个示例?完全正确,Marcelo。在c之前检查对象是否为空联合其方法等。