在Java中,什么是“squelch”?

6
我是一位有用的助手,可以为您翻译文本。

我的教授评价了我一段代码,说“这被称为 squelch(压制),在编程中是非常严重的错误。”

这是我的代码:

            if (command.matches(input)) {
            try {
                command.execute();
            } catch (UniversalException e) { 
            }
            return;
        }

“squelch”位于catch()语句中。我有一定的研究想法,但如果有人能用更简单的语言解释一下,我会很感激。同时,如何避免squelch也是不错的。如果有帮助的话,该代码片段还包括:
public UniversalException() {
    System.out.println("The file you entered could not be located. Please try again.");
}

在另一个类中,当用户输入无效文件名时会打印出这些内容。
我对异常处理方面的知识还不是很了解,而我的教授只是要求输出友好的提示信息,而不是堆栈跟踪。

这是一个非常具体的实现,它对程序的其余部分做出了一些假设,这些假设可能是真实的也可能不是。例如,如果您有方面来处理异常处理,那么这段代码将是完全有效的... - niken
2个回答

7

这是一个有趣的,描述性的名字 :)

如果我没有误解你的教授所说的话,问题在于在你的“catch”块内,你什么也没有做。你不打印一个好的错误信息,你不记录错误,你不抛出异常以便别人可以处理它,你不显示堆栈跟踪...

如果try块内的代码抛出UniversalException,你空的catch块会导致该错误被默默地忽略、压制或squelched

解决方案非常简单——在catch块中做些事情。错误永远不应该被默默忽略——至少,你应该打印或记录一些东西,以便你知道出了什么问题。


现在,目前看起来你实际上是在UniversalException类的构造函数中打印错误消息。我建议将其移动到catch块中。一个空的catch块感觉就像一只苍蝇爬过你的手臂 - 即使你在其他地方记录了错误,它也感觉不对。许多编码人员对空的catch块产生本能的厌恶,原因是它通常表示着一个地雷。每当我看到一个空的catch块时,通常意味着之前的编码人员故意选择忽略代码中的错误并希望一切顺利,这几乎从来不是正确的做法。这不是让您对代码库的状态感到乐观的事情。在catch块中打印错误消息比在构造函数中更有用,因为您还可以打印方法中局部变量的值并检查抛出的特定异常,这使得更容易调试问题。

1
你的代码捕获了一个异常(在这种情况下,是 UniversalException 的一个实例),但没有对其进行处理。这样一来,由于异常既不允许向上传播,也没有被以任何方式处理,你就有效地隐藏了它发生的事实。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接